Millist meetodit ei saa objektorienteeritud programmeerimises üle kirjutada?
sobes.tech AI
Vastus AI-lt
Mõnedes keeltes, näiteks Ruby, klassi initialize meetod, mida kasutatakse uute objektide initsialiseerimiseks, ei saa otse kutsuda alamklassides super.initialize, et täita vanema klassi loogikat. Selle asemel peab alamklass oma initialize rakenduses selgelt kutsuma super meetodi, mis automaatselt kutsub vanema klassi initialize meetodi.
Teistes keeltes, näiteks Java või C#, puuduvad "mitteülekirjutatavad" kasutaja meetodid sellises mõttes, et iga avalik või kaitstud (!) meetod, mis ei ole märgitud final (Java) või sealed (C#), võib olla üle kirjutatud. Kuid võib arvata, et konstruktorid on eriline "meetodi" tüüp, mida ei saa tavapärasel viisil üle kirjutada - ei ole võimalik deklareerida meetodit sama nime ja signatuuriga alamklassides, mis asendaks vanema konstruktorit. Alamklass võib omada oma konstruktorid, mis omakorda kutsuvad vanema klassi konstruktorid super (Java) või : base (C#) kaudu.
class Parent {
Parent() {
System.out.println("Vanema konstruktor");
}
void method() {
System.out.println("Vanema meetod");
}
}
class Child extends Parent {
Child() {
// Otse vanema konstruktorit kutsuma pole vaja,
// kui pole parameetreid - see kutsutakse automaatselt.
System.out.println("Lapse konstruktor");
}
@Override // Meetodit saab üle kirjutada
void method() {
System.out.println("Lapse meetod");
}
}
Seega võib konstruktorid üldiselt pidada meetoditeks, mida ei saa sama mõistmise järgi üle kirjutada nagu tavalisi meetodeid.