Junior
Kdy je metoda považována za přepsanou?
sobes.tech AI
Odpověď od AI
Metoda je považována za přepsanou v následujících případech:
- Je deklarována v odvozené třídě.
- Má stejné jméno jako metoda v rodičovské třídě.
- Má stejnou signaturu (počet a typy parametrů) a pořadí parametrů.
- Má typ návratové hodnoty kompatibilní s typem návratové hodnoty metody v rodičovské třídě (kovariantnost, pokud je to relevantní).
- Má stejný nebo širší přístupový modifikátor než metoda v rodičovské třídě (ve většině objektově orientovaných jazyků).
- Rodičovská metoda je deklarována jako virtuální, abstraktní nebo rozhraní (v jazycích, které vyžadují explicitní označení možnosti přepsání, například C# s klíčovým slovem
virtual).
Příklad v Javě:
// Rodičovská třída
class SuperClass {
// Metoda, kterou lze přepsat
public void display() {
System.out.println("Toto je metoda display třídy SuperClass.");
}
}
// Odvozená třída
class SubClass extends SuperClass {
// Přepsaná metoda display
@Override // Anotace pro kontrolu přepsání při kompilaci
public void display() {
System.out.println("Toto je metoda display třídy SubClass.");
}
}
Příklad v Pythonu:
# Rodičovská třída
class SuperClass:
# Metoda, kterou lze přepsat
def display(self):
print("Toto je metoda display třídy SuperClass.")
# Odvozená třída
class SubClass(SuperClass):
# Přepsaná metoda display
def display(self):
print("Toto je metoda display třídy SubClass.")
Klíčové je zachování názvu a signatury metody, ale změna jejího chování v odvozené třídě.
Důležitý rozdíl od overload:
Overloading znamená deklaraci více metod se stejným názvem ve stejné třídě, ale s různými signaturami. Overriding znamená deklaraci metody v odvozené třídě se stejným názvem a signaturou jako v rodičovské třídě.