Sobes.tech
Junior

Kdy dochází k přepsání metody (overriding)?

sobes.tech AI

Odpověď od AI

Přepsání metody (overriding) nastává v hierarchii dědičnosti, když podtřída poskytne vlastní implementaci metody, která již byla definována v nadtřídě se stejným názvem, signaturou (shodou typu a počtu parametrů) a typem návratové hodnoty (nebo kovariantním v případě návratového typu objektu).

Klíčové vlastnosti:

  • Dědičnost: Přepsání je možné pouze v kontextu dědičnosti (rodičovské a odvozené třídy).
  • Signatura: Metoda v odvozené třídě musí mít stejnou signaturu (název, počet a typy parametrů) a typ návratové hodnoty (nebo jeho kovariantní podtyp) jako metoda v rodičovské třídě.
  • Dostupnost: Metoda, která je přepsána, musí být dostupná pro odvozenou třídu (obvykle public, protected).
  • Polymorfismus: Přepsání je základem polymorfismu za běhu (runtime polymorphism), umožňující objektům odvozené třídy reagovat na volání metody svým vlastním způsobem, i když jsou na ně odkazovány přes referenci na rodičovskou třídu.

Příklad (Java):

// Rodičovská třída
class Animal {
    // Metoda, která bude přepsána
    public void makeSound() {
        System.out.println("Zvíře vydává zvuk");
    }
}

// Odvozená třída
class Dog extends Animal {
    // Přepsání metody makeSound()
    @Override // Anotace @Override je volitelná, ale doporučená
    public void makeSound() {
        System.out.println("Pes štěká");
    }
}

Příklad použití:

// Vytvoření objektu Dog
Animal myDog = new Dog();
// Volání metody. Bude volána přepsaná verze z Dog
myDog.makeSound(); // Výstup: Pes štěká

// Vytvoření objektu Animal
Animal someAnimal = new Animal();
// Volání metody. Bude volána verze z Animal
someAnimal.makeSound(); // Výstup: Zvíře vydává zvuk