Mi az öröklődés és a polimorfizmus a referencia típusú adatokban?
sobes.tech MI
Válasz az MI-től
Öröklődés egy olyan mechanizmus, amely lehetővé teszi egy új osztály (származtatott osztály, alosztály), hogy örökölje egy meglévő osztály (szülő osztály, ősosztály) mezőit és metódusait. Ez elősegíti a kód újrafelhasználását és az osztályhierarchiát.
A polimorfizmus (formák sokfélesége) az a képesség, hogy egy objektumnak több formája lehet. A referenciatípusok kontextusában ez azt jelenti, hogy egy szuperosztály változója hivatkozhat egy alosztály objektumára. Ez lehetővé teszi, hogy különböző alosztályok objektumait egységes módon kezeljük egy közös interfészen vagy szuperosztályon keresztül.
Két fő típusú polimorfizmus létezik:
- Fordítási idő (statikus polimorfizmus): általában metódus túlterheléssel (method overloading) érhető el, amikor egy osztályban több ugyanazzal a névvel rendelkező, de különböző szignatúrájú (paraméterek száma és/vagy típusa) metódus van.
- Futási idő (dinamikus polimorfizmus): metódus felülírással (method overriding) érhető el, amikor egy alosztály saját implementációt ad meg egy már a szuperosztályban definiált metódushoz. Amikor ezt a metódust szuperosztály hivatkozásán keresztül hívjuk, az alosztály implementációja fut le (ha az objektum típusa alosztály).
Példa öröklésre és dinamikus polimorfizmusra:
// Alap osztály
class Animal {
public void makeSound() {
System.out.println("Általános állati hang");
}
}
// Alosztály
class Dog extends Animal {
@Override // Metódus felülírás
public void makeSound() {
System.out.println("Vau!");
}
}
// Alosztály
class Cat extends Animal {
@Override // Metódus felülírás
public void makeSound() {
System.out.println("Miau!");
}
}
public class Main {
public static void main(String[] args) {
// Statikus típus az Animal, dinamikus típus a Dog
Animal myDog = new Dog();
// Statikus típus az Animal, dinamikus típus a Cat
Animal myCat = new Cat();
// Statikus típus az Animal, dinamikus típus az Animal
Animal genericAnimal = new Animal();
// Polimorfizmus bemutatása
myDog.makeSound(); // A Dog metódusát hívja
myCat.makeSound(); // A Cat metódusát hívja
genericAnimal.makeSound(); // Az Animal metódusát hívja
}
}
Ebben a példában a Dog és Cat öröklődnek az Animal-től. A myDog, myCat és genericAnimal változók statikus típusuk Animal, de különböző dinamikus típusú objektumokra mutatnak (Dog, Cat, Animal). A makeSound() hívásakor minden referencia a saját dinamikus típusának megfelelő metódust futtatja, ami a futásidejű polimorfizmust jelenti.