Sobes.tech
Middle

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.