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.