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

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Rozhraní: Přidán popis rozhraní.)
(Přidáno srovnání konstruktů.)
Řádka 54: Řádka 54:
 
* Klíčové slovo <code>abstract</code>.
 
* Klíčové slovo <code>abstract</code>.
 
* Těla některých metod nejsou uvedena.
 
* Těla některých metod nejsou uvedena.
 +
 +
 +
== Srovnání konceptů ==
 +
; Dědičnost
 +
* Používáme tehdy, kdy potomek přebírá ''všechny'' vlastnosti předka (a případně přidává něco dalšího).
 +
* Třída může mít ''jen jednoho'' předka.
 +
; Rozhraní
 +
* Pouze předepisuje, jaké metody má třída mít.
 +
* Nemůžeme z rozhraní převzít hotový kód.
 +
* Nelze vytvořit instanci rozhraní (nelze volat <code>new Rozhrani()</code>).
 +
* Můžeme implementovat kolik rozhraní chceme.
 +
* Je užitečné, když každá třída má na společnou zprávu reagovat jinak.
 +
; Abstraktní třída
 +
* Je jakýmsi mezistupněm, kdy přebíráme kód jen některých metod.
 +
* Nelze vytvářet instance abstraktní třídy.
  
  

Verze z 7. 4. 2017, 09:38


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


Srovnání konceptů

Dědičnost
Rozhraní
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