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)
}
}