Sobes.tech
Junior

Čo je dedičnosť a polymorfizmus v referenčných typoch údajov?

sobes.tech AI

Odpoveď od AI

Dedičstvo — je mechanizmus, ktorý umožňuje novému triede (podtriede/dcérskej triede) dediť vlastnosti (polia) a správanie (metódy) existujúcej triedy (nadtriedy/rodičovskej triedy), rozširujúc alebo prepísaním funkčnosti. To prispieva k opakovanej použiteľnosti kódu a vytváraniu vzťahov "je" (is-a).

Polymorfizmus — je možnosťou objektov rôznych tried reagovať na rovnaké meno metódy rôznymi spôsobmi, v závislosti od ich konkrétneho typu počas behu. Zabezpečuje flexibilitu a rozšíriteľnosť kódu, umožňujúc spracovanie objektov podtried cez odkaz na nadtriedu.

V referenčných typoch dát (triedach) tieto koncepty zohrávajú kľúčovú úlohu:

  • Dedičstvo: Podtrieda má prístup k členom nadtriedy a môže pridávať svoje vlastné alebo meniť správanie zdedených metód (prepísanie - overriding). Objekt podtriedy môže byť použitý kdekoľvek, kde sa očakáva objekt nadtriedy.
  • Polymorfizmus: Rôzne objekty patriace do jednej dedičskej hierarchie môžu byť spracované rovnakým kódom, volajúc rovnakú metódu, ale bude vykonaná implementácia tejto metódy, špecifická pre konkrétny typ objektu počas behu.

Príklad v Jave:

// Nadtrieda (rodičovská)
class Animal {
    public void makeSound() {
        System.out.println("Vydáva zvuk");
    }
}

// Podtrieda (dcérska), dedí od Animal
class Dog extends Animal {
    // Prepísanie metódy z nadtriedy
    @Override
    public void makeSound() {
        System.out.println("Hav!");
    }
}

// Podtrieda (dcérska), dedí od Animal
class Cat extends Animal {
    // Prepísanie metódy z nadtriedy
    @Override
    public void makeSound() {
        System.out.println("Mňau!");
    }
}

// Príklad polymorfizmu
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // objekt nadtriedy
        Animal myDog = new Dog();       // objekt podtriedy, odkaz na nadtriedu
        Animal myCat = new Cat();       // objekt podtriedy, odkaz na nadtriedu

        myAnimal.makeSound(); // Vypíše: Vydáva zvuk
        myDog.makeSound();    // Vypíše: Hav! (polymorfizmus - volá sa metóda Dog)
        myCat.makeSound();    // Vypíše: Mňau! (polymorfizmus - volá sa metóda Cat)
    }
}