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 superlze 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.