Sobes.tech
Junior

Co je to dědičnost a polymorfismus v referenčních typech dat?

sobes.tech AI

Odpověď od AI

Dědičnost je mechanismus, který umožňuje novému třídě (podtřídě/dceřiné třídě) dědit vlastnosti (pole) a chování (metody) existující třídy (nadtřídy/rodiče), čímž rozšiřuje nebo přepisuje funkčnost. To podporuje opakované použití kódu a vytváří vztahy "je" (is-a).

Polymorfismus je schopnost objektů různých tříd reagovat na stejný název metody odlišně, v závislosti na jejich konkrétním typu během běhu. Zajišťuje flexibilitu a rozšiřitelnost kódu, umožňuje zpracovávat objekty podtříd přes odkaz na nadtřídu.

V referenčních typech dat (třídách) hrají tyto koncepty klíčovou roli:

  • Dědičnost: Podtřída má přístup ke členům nadtřídy a může přidávat své vlastní nebo měnit chování zděděných metod (přepsání - overriding). Objekt podtřídy může být použit kdekoliv, kde se očekává objekt nadtřídy.
  • Polymorfismus: Různé objekty patřící do stejné hierarchie dědičnosti mohou být zpracovávány stejným kódem, voláním stejné metody, ale implementace této metody bude specifická pro konkrétní typ objektu během běhu.

Příklad v Javě:

// Nadtřída (rodičovská třída)
class Animal {
    public void makeSound() {
        System.out.println("Vydává zvuk");
    }
}

// Podtřída (dceřiná třída), dědí od Animal
class Dog extends Animal {
    // Přepisuje metodu nadtřídy
    @Override
    public void makeSound() {
        System.out.println("Haf!");
    }
}

// Podtřída (dceřiná třída), dědí od Animal
class Cat extends Animal {
    // Přepisuje metodu nadtřídy
    @Override
    public void makeSound() {
        System.out.println("Mňau!");
    }
}

// Příklad polymorfismu
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // objekt nadtřídy
        Animal myDog = new Dog();       // objekt podtřídy, odkaz na nadtřídu
        Animal myCat = new Cat();       // objekt podtřídy, odkaz na nadtřídu

        myAnimal.makeSound(); // Vypíše: Vydává zvuk
        myDog.makeSound();    // Vypíše: Haf! (polymorfismus - metoda Dog)
        myCat.makeSound();    // Vypíše: Mňau! (polymorfismus - metoda Cat)
    }
}