Kterou metodu nelze přepsat v objektově orientovaném programování?
sobes.tech AI
Odpověď od AI
V některých jazycích, například v Ruby, nelze přímo volat metodu třídy initialize, která se používá k inicializaci nových objektů, v podtřídě jako super.initialize pro provedení logiky rodičovské třídy. Místo toho musí podtřída výslovně zavolat metodu super ve své implementaci initialize, což automaticky zavolá metodu initialize rodičovské třídy.
V jiných jazycích, například v Javě nebo C#, neexistují "uživatelské" metody, které by nebyly možné přepsat v tradičním smyslu, protože jakákoli veřejná nebo chráněná (!) metoda, která není označena jako final (Java) nebo sealed (C#), může být přepsána. Nicméně, lze považovat, že konstruktory jsou zvláštním typem "metody", kterou nelze přepsat v běžném smyslu: nelze deklarovat metodu se stejným názvem a podpisem uvnitř podtřídy, která by nahradila konstruktor rodičovské třídy. Podtřída může mít své vlastní konstruktory, které naopak volají konstruktory rodičovské třídy přes super (Java) nebo : base (C#).
class Parent {
Parent() {
System.out.println("Konstruktor rodiče");
}
void method() {
System.out.println("Metoda rodiče");
}
}
class Child extends Parent {
Child() {
// Výslovné volání konstruktoru rodiče není nutné,
// pokud nejsou parametry, volá se automaticky.
System.out.println("Konstruktor dítěte");
}
@Override // Přepsání metody je možné
void method() {
System.out.println("Metoda dítěte");
}
}
Obecně lze říci, že konstruktory lze považovat za metody, které nelze přepsat ve stejném smyslu jako běžné metody.