Sobes.tech
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:

  1. Je deklarována v odvozené třídě.
  2. Má stejné jméno jako metoda v rodičovské třídě.
  3. Má stejnou signaturu (počet a typy parametrů) a pořadí parametrů.
  4. Má typ návratové hodnoty kompatibilní s typem návratové hodnoty metody v rodičovské třídě (kovariantnost, pokud je to relevantní).
  5. Má stejný nebo širší přístupový modifikátor než metoda v rodičovské třídě (ve většině objektově orientovaných jazyků).
  6. 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ě.