dedicnost
Obsah
Dědičnost (Inheritance)
Dědičnost definuje vztah typu „je“ (is-a). Pokud třída Pes dědí od třídy Zvíře, pak platí, že „Pes je Zvíře“. Tento mechanismus umožňuje programátorům psát kód jen jednou a následně jej rozšiřovat, místo aby jej znovu kopírovali.
Základní terminologie
- Rodičovská třída (Superclass / Base class): Obecná třída, ze které se dědí (např.
Vozidlo). - Potomkovská třída (Subclass / Derived class): Specializovaná třída, která přejímá prvky od rodiče a doplňuje je o vlastní (např.
Auto,Motorka).
Hlavní výhody dědičnosti
- Znovupoužitelnost kódu: Obecné funkce (např.
pohniSe()) napíšete jednou do rodičovské třídy a všechny tisíce potomků je budou umět automaticky také. - Udržovatelnost: Pokud najdete chybu v obecné logice, opravíte ji na jednom místě (u rodiče) a oprava se projeví u všech potomků.
- Hierarchická struktura: Pomáhá logicky organizovat složité systémy (např. v grafických rozhraních, kde
TlacitkoiTextovePoledědí od obecnéhoPrvku).
Jak dědičnost funguje v praxi
Představme si hierarchii zvířat. Třída Zvíře definuje atribut jmeno a metodu spi().
| Třída | Má k dispozici | Vlastní unikátní prvek |
|---|---|---|
| Zvíře (Rodič) | jmeno, spi() | (není) |
| Pes (Potomek) | jmeno, spi() | metodu stekej() |
| Pták (Potomek) | jmeno, spi() | metodu let() |
Přepsání metody (Overriding)
Potomek může metodu, kterou zdědil, upravit tak, aby mu lépe vyhovovala. Tomu se říká Overriding. Například obě zvířata dědí metodu vydejZvuk(), ale Pes ji přepíše na „Haf“, zatímco Kočka na „Mňau“.
Omezení a pravidla
- Jednoduchá vs. vícenásobná dědičnost: Většina moderních jazyků (Java, C#, Python) preferuje jednoduchou dědičnost – třída může mít pouze jednoho přímého rodiče. Vyhýbají se tak „problému diamantu“ (nejasnost, od koho dědit, pokud mají dva rodiče metodu se stejným názvem).
- Klíčové slovo 'super': Potomek se může odkazovat na originální kód rodiče pomocí klíčového slova
super(nebobase). Často se používá v konstruktorech. - Finální třídy: Některé třídy lze označit jako „final“ (v Javě) nebo „sealed“ (v C#), což znamená, že z nich již nikdo dál dědit nesmí.
Příklad (Java)
class Vozidlo { void trub() { System.out.println("Túúúút!"); } } class Auto extends Vozidlo { int pocetDveri = 5; } // Použití Auto mojeAuto = new Auto(); mojeAuto.trub(); // Zděděno od Vozidla System.out.println(mojeAuto.pocetDveri); // Vlastní atribut Auta
Související pojmy: OOP, Class, Instance, Polymorfismus, Konstruktor, Abstrakce, Přetěžování.
dedicnost.txt · Poslední úprava: autor: admin
