Sobes.tech
Middle

Čo je dedičstvo a polymorfizmus v kontexte referenčných typov údajov?

sobes.tech AI

Odpoveď od AI

Dedičstvo je mechanizmus, ktorý umožňuje vytvoriť nový triedu (odvodenú, dcérsku), ktorá dedí polia a metódy existujúcej triedy (základnej, rodičovskej). To podporuje opakované použitie kódu a tvorbu hierarchií tried.

Polymorfizmus je schopnosť objektov rôznych tried správať sa jednotne alebo mať odlišné správanie pri volaní tej istej metódy. Rozlišujú sa dva hlavné typy: statický (preťaženie metód) a dynamický (prepísanie metód).

V kontexte referenčných dátových typov umožňuje dedičstvo vytvoriť premennú základnej triedy, ktorá môže odkazovať na objekt odvodenéj triedy. V tomto prípade sa polymorfizmus prejavuje tým, že pri volaní metódy cez takúto premennú sa vykoná verzia metódy z reálneho typu objektu, nie z typu odkazu (dynamický polymorfizmus).

Príklad v jazyku Java:

// Základná trieda
class Animal {
    public void makeSound() {
        System.out.println("Vydáva zvuk");
    }
}

// Odvodená trieda 1
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Hav hav");
    }
}

// Odvodená trieda 2
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Mňau mňau");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Premenná typu Animal odkazujúca na objekt Dog
        Animal myCat = new Cat(); // Premenná typu Animal odkazujúca na objekt Cat

        myDog.makeSound(); // Volá metódu z Dog (polymorfizmus)
        myCat.makeSound(); // Volá metódu z Cat (polymorfizmus)
    }
}

V tomto príklade majú myDog a myCat referenčný typ Animal, ale vďaka polymorfizmu, pri volaní makeSound() sa vykoná implementácia z Dog a Cat.