Sobes.tech
Junior

Mi az öröklődés és a polimorfizmus a referencia típusokban?

sobes.tech MI

Válasz az MI-től

Az öröklődés egy olyan mechanizmus, amely lehetővé teszi egy új osztály (alosztály/gyermekosztály) számára, hogy örökölje egy meglévő osztály (szuperosztály/szülőosztály) tulajdonságait (mezőket) és viselkedését (metódusokat), bővítve vagy felülírva a funkcionalitást. Ez elősegíti a kód újrafelhasználását és "valami" (is-a) kapcsolatokat hoz létre.

A polimorfizmus az, hogy különböző osztályok objektumai ugyanarra a metódusnévre más-más módon reagálnak, futási időben a konkrét típusuktól függően. Ez rugalmasságot és bővíthetőséget biztosít a kódnak, lehetővé téve az alosztályok objektumainak kezelését egy szuperosztály hivatkozásán keresztül.

Ezek a fogalmak a referencia típusú adatszerkezetek (osztályok) esetében kulcsfontosságúak:

  • Öröklődés: Az alosztály hozzáfér a szuperosztály tagjaihoz, és sajátokat adhat hozzá vagy módosíthatja az örökölt metódusok viselkedését (felülírás - overriding). Egy alosztály objektuma bárhol használható, ahol szuperosztály objektumát várják.
  • Polimorfizmus: Azonos öröklődési hierarchiába tartozó különböző objektumokat ugyanazzal a kóddal lehet kezelni, ugyanazt a metódust hívva, de a metódus implementációja az adott objektum típusától függően lesz specifikus.

Java példával:

// Szuperosztály (szülő osztály)
class Animal {
    public void makeSound() {
        System.out.println("Hangot ad ki");
    }
}

// Alosztály (gyermek osztály), öröklődik az Animal-ból
class Dog extends Animal {
    // Felülírja a szuperosztály metódusát
    @Override
    public void makeSound() {
        System.out.println("Vau!");
    }
}

// Alosztály (gyermek osztály), öröklődik az Animal-ból
class Cat extends Animal {
    // Felülírja a szuperosztály metódusát
    @Override
    public void makeSound() {
        System.out.println("Miau!");
    }
}

// Polimorfizmus példája
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // szuperosztály objektuma
        Animal myDog = new Dog();       // alosztály objektuma, szuperosztály hivatkozással
        Animal myCat = new Cat();       // alosztály objektuma, szuperosztály hivatkozással

        myAnimal.makeSound(); // Kimenet: Hangot ad ki
        myDog.makeSound();    // Kimenet: Vau! (polimorfizmus - Dog metódus)
        myCat.makeSound();    // Kimenet: Miau! (polimorfizmus - Cat metódus)
    }
}