Melyik módszert nem lehet felülírni az objektumorientált programozásban?
sobes.tech MI
Válasz az MI-től
Bizonyos nyelveken, például Ruby-ban, az initialize osztálymetódus, amelyet az új objektumok inicializálására használnak, nem hívható közvetlenül alosztályban super.initialize-ként a szülő osztály logikájának végrehajtására. Ehelyett az alosztálynak expliciten hívnia kell a super metódust az initialize-ben, ami automatikusan meghívja a szülő osztály initialize metódusát.
Más nyelveken, például Java vagy C#, nincsenek "felhasználói" metódusok, amelyeket hagyományos értelemben nem lehet felülírni, mivel bármely nyilvános vagy védett (!) metódus, amely nincs final (Java) vagy sealed (C#) jelöléssel ellátva, felülírható. Azonban el lehet tekinteni attól, hogy a konstruktorok speciális típusú "metódusok", amelyeket nem lehet hagyományos értelemben felülírni: nem lehet ugyanazzal a névvel és szignatúrával metódust deklarálni egy alosztályban, amely helyettesítené a szülő konstruktorát. Az alosztály saját konstruktoraival rendelkezhet, amelyek a super (Java) vagy : base (C#) segítségével hívják a szülő konstruktorait.
class Parent {
Parent() {
System.out.println("Szülő konstruktor");
}
void method() {
System.out.println("Szülő módszere");
}
}
class Child extends Parent {
Child() {
// A szülő konstruktorának explicitt hívása nem szükséges,
// ha nincsenek paraméterek, automatikusan meghívódik.
System.out.println("Gyermek konstruktor");
}
@Override // A metódus felülírása lehetséges
void method() {
System.out.println("Gyermek módszere");
}
}
Általánosságban elmondható, hogy a konstruktorokat olyan módszernek lehet tekinteni, amelyeket nem lehet ugyanúgy felülírni, mint a normál módszereket.