Java: Abstraktní třídy, dědičnost a rozhraní

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Přetypování: Přidán příklad přetypování s GUI SWING)
(Rozhraní: Přidán popis rozhraní.)
Řádka 27: Řádka 27:
 
* Klíčové slovo <code>implements</code>.
 
* Klíčové slovo <code>implements</code>.
 
* Může mít pouze hlavičky metod a veřejné konstantní atributy.
 
* Může mít pouze hlavičky metod a veřejné konstantní atributy.
 +
* Implementací rozhraní garantujeme, že naše třída má určité metody.
 +
* Zajišťujeme například to, aby objekty různých tříd šly umístit do kontejneru.
  
 +
; Deklarace rozhraní
 +
 +
public interface Zasahnutelne {
 +
    public void zasah(Strela s);
 +
        ''// Neříkáme, '''jak''' se má objekt chovat.''
 +
        ''// Jen vyžadujeme, že '''bude mít''' tuto metodu.''
 +
}
 +
 +
; Třída, která implementuje rozhraní
 +
 +
public class Prisera {
 +
 +
    ''...''
 +
    ''... Může mít různé metody a atributy, ale '''musí''' mít metodu zasah(...)!!!''
 +
    ''...''
 +
 +
    public void zasah(Strela s) {
 +
        ''// Popíšeme, jak se má reagovat na zprávu/metodu zasah(...).''
 +
        this.getWorld().removeObject(this);
 +
    }
  
 
== Abstraktní třída ==
 
== Abstraktní třída ==

Verze z 7. 4. 2017, 09:28


Obsah

Dědičnost

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í

Deklarace rozhraní
public interface Zasahnutelne {
    public void zasah(Strela s);
        // Neříkáme, jak se má objekt chovat. 
        // Jen vyžadujeme, že bude mít tuto metodu.
}
Třída, která implementuje rozhraní
public class Prisera {

    ... 
    ... Může mít různé metody a atributy, ale musí mít metodu zasah(...)!!!
    ...

    public void zasah(Strela s) {
        // Popíšeme, jak se má reagovat na zprávu/metodu zasah(...).
        this.getWorld().removeObject(this);
    }

Abstraktní třída


Odkaz na předka — super


Přetypování

Příklady přetypování
Prekazka prekazka = (Prekazka) this.getOneIntersectingObject(Prekazka.class);
if (prekazka != null) {
    int prekazka.getPruhlednost();
    ...
}
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.

Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje