Abstraktné metódy

<< Abstraktné triedy | Obsah | Interface-y (rozhrania) >>

Abstraktné metódy majú tri hlavné vlastnosti:

  • sú to metódy bez tela
  • môžu sa vyskytovať iba v abstraktnej triede
  • neabstraktné triedy, ktoré dedia od takejto abstraktnej triedy musia túto metódu prekryť

V našom príklade s filmami by sme si mohli zmeniť metódu dajUmiestnenie() v abstraktnej triede Film. Tým by sme prinútili všetky triedy, ktoré dedia od triedy Film, aby mali vlastnú metódu dajUmiestnenie(). V triede Film teda zapíšeme metódu bez tela spolu so slovíčkom abstract:

public abstract class Film {
...

        public abstract String dajUmiestnenie(); // na konci bodkočiarka a žiade kučeravé zátvorky {}

...
}

Ak by sme potom vytvorili triedu FilmNaUSB, ktorá by dedila od triedy Film, ale nemala by metódu dajUmiestnenie(), Eclipse by protestoval (inherited znamená oddedená):

public class FilmNaUSB extends Film { //hlási chybu "The type FilmNaUSB must implement the inherited abstract method Film.dajUmiestnenie()"

...
}

Takto si pomocou mechanizmu abstraktných metód a tried vieme uchrániť funkcionalitu nášho zoznamu filmov lebo vieme, že ak máme pole filmov tak sú v nich iba objekty, ktorých triedy dedia od triedy Film a všetky majú funkčnú metódu dajUmiestnenie(). Teda bez obáv môžeme volať napríklad nasledujúcu metódu triedy Film, ktorá vráti názvy filmov a ich umiestnenia.

public class ZoznamFilmov {
...     
        public void vypisUmiestnenia() {
                for (int i = 0; i < filmy.length; i++) {
                        System.out.print(filmy[i].getNazovFilmu()+": ");
                        System.out.println(filmy[i].dajUmiestnenie());
                }
        }
...
}