public class Employee extends Person {
// ... popis vlastností (proměnných, metod...)
// zaměstnance navíc oproti (obecnému) člověku...
}
V realitě často vidíme, že objektové třídy jsou podtřídami, speciálními případy jiných:
DogKeeper
je současně typu Person
neboDog
je současně typu Pet
extends
).
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
Klíčovým slovem extends
:
public class Employee extends Person {
// ... popis vlastností (proměnných, metod...)
// zaměstnance navíc oproti (obecnému) člověku...
}
Třídy mohou mít tyto skupiny vlastností:
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 {
// now it remembers also minimal balance
private int minimalBalance;
public CheckedAccount(Person owner, int minBal, int initBal) {
// original initialization of Account
super(owner, initBal);
if(initBal < minBal) { // enough initial balance?
throw new IllegalArgumentException("initial balance < minimal");
}
this.minimalBalance = minBal;
}
public boolean debit(int amount) {
// min. balance is checked
if(getBalance() - amount >= minimalBalance) {
return super.debit(amount); // if kept, the debit is deducted
} else return false; // otherwise not
}
}
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, tedy třídy Account
.super
nepoužilo, zavolala by se metoda debit
třídy CheckedAccount
a program by se zacyklil!/