public class Employee extends Person { // ... popis vlastností (proměnných, metod...) // zaměstnance navíc oproti (obecnému) člověku... }
DogKeeper
je současně typu Person
nebo
Dog
je současně typu Pet
extends
).
Note
|
V Javě je každá uživatelem definovaná třída potomkem nějaké jiné — neuvedeme-li předka explicitně, je předkem vestavěná třída |
DogKeeper
je současně Person
.
Person
← Employee
← Manager
extends
:
public class Employee extends Person { // ... popis vlastností (proměnných, metod...) // zaměstnance navíc oproti (obecnému) člověku... }
Opakování:
record
) nebo z C jako struct
.
Dědičnost (alespoň v javovém smyslu) znamená, že dceřinná třída (podtřída, potomek):
Account
Cíl: vylepšit třídu Account
(demo 05_Account
)
debit
— pomocí jejího překrytí (overriding)
Account
nazveme CheckedAccount
Account
public class Account implements Informing { private int balance; ... public boolean debit(int amount) { if(amount <= 0) return false; balance -= amount; return true; } }
CheckedAccount
public class CheckedAccount extends Account { private int minimalBalance; // minimální zůstatek přibývá public CheckedAccount(Person owner, int minimalBalance, int initialBalance) { super(owner, initialBalance); // udělá původní inicializaci Account if(initialBalance < minimalBalance) { // ověří dostatečný poč. zůstatek throw new IllegalArgumentException("initialBalance < minimalBalance"); } this.minimalBalance = minimalBalance; } public boolean debit(int amount) { if(getBalance() - amount >= minimalBalance) { // hlídá si min. zůstatek return super.debit(amount); // je-li zachován, odečte z účtu } else return false; // jinak ne } }
extends
značí, že třída CheckedAccount
je
potomkem/podtřídou/rozšířením/dceřinnou třídou (subclass) třídy Account
.
super.metoda(…);
značí, že je volána metoda
rodičovské třídy/předka/nadtřídy (superclass).
super
nepoužilo, zavolala by se metoda debit
třídy CheckedAccount
a program by se zacyklil!