public class Account { ... }
Dědičnost umožňuje vztah X is Y (X je Y) mezi objekty.
Polymorfismus je schopnost objektu měnit chování počas běhu.
Object o = new String("String, but can be Object")
.Object
, je možné dosadit instanci jakékoli její podtřídy.
Odkazovaný objekt se chová podle toho, jaké třídy je instancí.Zapouzdření je zabalení dat a metod do jedné komponenty (třídy), souvisí s viditelností objektů.
Existují čtyři možnosti:
public
= veřejnýprotected
= chráněnýprivate
= soukromýModifier | Class | Package | Subclass (diff. package) | World |
---|---|---|---|---|
public |
Y |
Y |
Y |
Y |
protected |
Y |
Y |
Y |
N |
no modifier |
Y |
Y |
N |
N |
private |
Y |
N |
N |
N |
private
je viditelný pouze v rámci dané třídy
Třídy nemohou být protected !
|
třídy/rozhraní, metody, konstanty
atributy, metody, konstanty
pravděpobně nebudeme používat, výjimečně metody, atributy
pravděpobně nebudeme používat
public
public class Account { ... }
U třídy Account
lze např.
Account
v metodě jiné třídyAccount
ve stejném i jiném balíkuAccount
musejí vždy být veřejnéAccount.java
private
public class Account {
private String owner;
...
public void add(Account another) {
another.owner; // can be accessed!
...
}
}
owner
nelze přistoupit v podtřídě, pouze v dané třídě.getAge()
nemusí existovat jako proměnná, ale může se v případě volání spočítat.
Volbou private nic zásadně nepokazíme.
|
Třídy mohou mít viditelnost private
.
Proč by někdo chtěl privátní třídu?
public class SomeClass {
private class InnerDataStructure { ... }
// code using InnerDataStructure
}
Ve stejném souboru může být libovolný počet deklarací neveřejných tříd. Není to však hezké. |
package-private
package cz.some.pkg;
class Account {
// package-private class
// available only in cz.some.pkg
}
private
nebo rozhraní public
.protected
protected
, tj. přístupné jen z podtříd a tříd stejného balíku.public class Account {
// attribute can be protected (but it is better to have it private)
protected float creditLimit;
}
Obvykle se řídíme následujícím:
public
, je-li užitečná i mimo třídu či balíkprotected
je-li je vhodná k překrytí v případných podtřídáchprivate
private
protected
, je-li potřeba přímý přístup v podtříděpublic
package-private
nebo private
/