Sobes.tech
Middle

Akú metódu nie je možné prepísať v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

V niektorých jazykoch, ako je Ruby, nemôže byť priamo volaná metóda triedy initialize, ktorá sa používa na inicializáciu nových objektov, v podtriede ako super.initialize na vykonanie logiky rodičovskej triedy. Namiesto toho musí podtried explicitne zavolať metódu super vo svojej implementácii initialize, čo automaticky zavolá metódu initialize rodičovskej triedy.

V iných jazykoch, ako je Java alebo C#, neexistujú "používateľské" metódy, ktoré by nebolo možné prepísať v tradičnom zmysle, pretože akákoľvek verejná alebo chránená (!) metóda, ktorá nie je označená ako final (Java) alebo sealed (C#), môže byť prepísaná. Avšak, možno považovať, že konštruktory sú špeciálnym typom "metódy", ktorú nie je možné prepísať v bežnom zmysle: nie je možné deklarovať metódu s rovnakým menom a podpisom v podtriede, ktorá by nahradila konštruktor rodičovskej triedy. Podtried môže mať vlastné konštruktory, ktoré naopak volajú konštruktory rodičovskej triedy cez super (Java) alebo : base (C#).

class Parent {
    Parent() {
        System.out.println("Konštruktor rodiča");
    }
    void method() {
        System.out.println("Metóda rodiča");
    }
}

class Child extends Parent {
    Child() {
        // Explicitné volanie konštruktora rodiča nie je potrebné,
        // ak nie sú parametre, volá sa automaticky.
        System.out.println("Konštruktor dieťaťa");
    }
    @Override // Prepísanie metódy je možné
    void method() {
        System.out.println("Metóda dieťaťa");
    }
}

Všeobecne možno povedať, že konštruktory možno považovať za metódy, ktoré nie je možné prepísať v rovnakom zmysle ako bežné metódy.