Java: Abstraktní třídy, dědičnost a rozhraní
Z MiS
(Rozdíly mezi verzemi)
(Přidáno přetypování a příklad.) |
(→Přetypování: Přidán příklad přetypování s GUI SWING) |
||
Řádka 45: | Řádka 45: | ||
* V tom případě musíme použít přetypování. | * V tom případě musíme použít přetypování. | ||
− | * Přetypování zapíšeme tak, že do závorky před výraz, který vrací takto uloženého potomka, zapíšeme název třídy předka | + | * Přetypování zapíšeme tak, že do závorky před výraz, který vrací takto uloženého potomka, zapíšeme název třídy předka. |
+ | |||
+ | ; Příklady přetypování | ||
+ | * Greenfoot a detekce kolize s konkrétním typem aktéra | ||
Prekazka prekazka = '''(Prekazka)''' this.getOneIntersectingObject(Prekazka.class); | Prekazka prekazka = '''(Prekazka)''' this.getOneIntersectingObject(Prekazka.class); | ||
Řádka 53: | Řádka 56: | ||
} | } | ||
− | + | * GUI pomocí knihovny Swing — zjištění zdroje události | |
+ | public void actionPerformed(ActionEvent event) { | ||
+ | Button zdroj = '''(Button)''' event.getSource(); | ||
+ | zdroj.getTitle(); | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | <div class="Varovani">Pozor, musíme si být stoprocentně jisti, že objekt, který je uložen v proměnné datového typu <code>Predek</code> je ve skutečnosti opravdu datového typu <code>Potomek</code>. Pokud by nebyl, běh programu by skončil výjimečný stavem a aplikace by havarovala.</div> | ||
== Související stránky == | == Související stránky == | ||
* [[Objektově orientované programování]] | * [[Objektově orientované programování]] |
Verze z 28. 2. 2017, 12:32
Obsah |
Dědičnost
- Klíčové slovo
extends
. - Třída může mít pouze jednu rodičovskou třídu!
- Potomek „dědí“ všechny vlastnosti předka.
- Potomek může kdykoli nahradit předka. Takže pokud máme proměnnou datového typu
Predek
, můžeme do ní uložit instanci třídyPotomek
. Opačně to však nejde!
- Příklad
public class Kamion { int nosnost; ... public int getNosnost() { return this.nosnost; } ... } public class KamionSPrivesem extends Kamion { Prives prives; ... public int getNosnost() { return this.getHodnota()+this.prives.getHodnota(); } ... }
Rozhraní
- Klíčové slovo
implements
. - Může mít pouze hlavičky metod a veřejné konstantní atributy.
Abstraktní třída
- Klíčové slovo
abstract
. - Těla některých metod nejsou uvedena.
Odkaz na předka — super
- Jsou situace, kdy potřebujeme změnit chování některé metody předka v potomkovi. Mluvíme o překrývání metod.
- Pokud potřebujeme v potomkovi přesto použít metodu předka, použijeme k tomu klíčové slovo
super
. - Klíčovým slovem
super
lze také zavolat konstruktor předka.
Přetypování
- Potomek může vždy zastoupit předka. Do proměnné datového typu předka tedy můžeme uložit instanci třídy potomka.
- Jsou ale situace, kdy potřebujeme k takto uloženému potomkovi znovu přistupovat jako k potomkovi včetně všech jeho metod a atributů.
- V tom případě musíme použít přetypování.
- Přetypování zapíšeme tak, že do závorky před výraz, který vrací takto uloženého potomka, zapíšeme název třídy předka.
- Příklady přetypování
- Greenfoot a detekce kolize s konkrétním typem aktéra
Prekazka prekazka = (Prekazka) this.getOneIntersectingObject(Prekazka.class); if (prekazka != null) { int prekazka.getPruhlednost(); ... }
- GUI pomocí knihovny Swing — zjištění zdroje události
public void actionPerformed(ActionEvent event) { Button zdroj = (Button) event.getSource(); zdroj.getTitle(); ... }
Pozor, musíme si být stoprocentně jisti, že objekt, který je uložen v proměnné datového typu
Predek
je ve skutečnosti opravdu datového typu Potomek
. Pokud by nebyl, běh programu by skončil výjimečný stavem a aplikace by havarovala.