public class PremiumAccount extends Account {
public PremiumAccount() {
setBalance(1000); // CHYBA, pokud je setBalance() v nadride protected bez final
}
}
Tomáš Pitner, Radek Ošlejšek, Marek Šabo, Jakub Čecháček pitner@muni.cz
Dědičnost. Nejlepší objektově-orientovaný způsob, jak se pohádat a naštvat ty před námi i po nás.
Je fajn, ušetříme psaní kódu i jeho objem (kód je tam jednou), omezí se redundance.
Někdy dokonce i předejdeme chybám tím, že chybu opravíme na jednom místě a OK, protože efekt se hned bez dalšího promítne do všech podtříd = je poděděn.
Můžeme využít polymorfismus, kdy jsme schopni jednotně obsloužit více typů objektů
například Employee
, Manager
nebo Student
jsou všechno osoby Person
a mají tedy jméno getName()
Dědičnost je příklad silné (těsné) závislosti.
Změna v rodičovské třídě (nadtřídě) má silný vliv na funkci, případně i kompilovatelnosti podtříd.
Metodu, která se dá překrýt v podtřídě, nesmíme volat z konstruktoru!
Metodu, která se dá překrýt v podtřídě, nesmíme volat z konstruktoru!
Příklad "prémiový" bankovní účet, kde má být po vytvoření hned 1000 Kč.
public class PremiumAccount extends Account {
public PremiumAccount() {
setBalance(1000); // CHYBA, pokud je setBalance() v nadride protected bez final
}
}
Dědičnost se dá vždy nahradit spoluprací objektů
Např. namísto Mamal
a Bird
lišících se povrchem těla a rozšiřujících třídu Animal
může mít pouze třídu
Animal
odkazující na …
- objekt BodySurface ve stavu "hair" nebo "feathers".
- Dědičnost se často vyskytuje v návrhových vzorech, kde je ale přesně cílená a splňuje "best practices".