Obyekt yönümlü proqramlaşdırmada hansı metod yenidən təyin edilə bilməz?
sobes.tech Süni İntellekt
AI-dan cavab
Bəzi dillərdə, məsələn, Ruby-də, yeni obyektlərin başlanğıcı üçün istifadə olunan initialize sinif metodu, törəmə sinifdə birbaşa super.initialize kimi çağırıla bilməz, çünki bu, valideyn sinfinin loqikasını icra etmək üçündür. Əvəzində, törəmə sinif initialize-də açıq şəkildə super metodunu çağırmalıdır ki, bu da avtomatik olaraq valideyn sinfinin initialize metodunu çağırır.
Digər dillərdə, məsələn, Java və ya C#-da, final (Java) və ya sealed (C#) ilə işarələnməyən hər hansı bir ictimai və ya qorunan (!) metod, ənənəvi mənada, yenidən yazıla bilər. Ancaq, konstruktorların xüsusi bir növ "metod" olduğu və ənənəvi mənada yenidən yazıla bilməyəcəyi qəbul edilə bilər: valideyn sinfinin konstruktorunu dəyişdirəcək eyni adlı və imzalı metod törəmə sinifdə elan edilə bilməz. Törəmə sinif öz konstruktorlarına sahib ola bilər və bunlar, super (Java) və ya : base (C#) vasitəsilə valideyn sinfinin konstruktorlarını çağırır.
class Parent {
Parent() {
System.out.println("Valideyn konstruktoru");
}
void method() {
System.out.println("Valideyn metodu");
}
}
class Child extends Parent {
Child() {
// Valideyn konstruktorunu açıq çağırmaq lazım deyil,
// parametr yoxdursa, avtomatik çağrılır.
System.out.println("Uşaq konstruktoru");
}
@Override // Metodun yenidən yazılması mümkündür
void method() {
System.out.println("Uşaq metodu");
}
}
Ümumiyyətlə, konstruktorların, adi metodlar kimi, yenidən yazıla bilməyən metodlar kimi qəbul edilə biləcəyini söyləmək olar.