Java - polymorfizmus
Základy informatiky - jazyk Java
Úvod do programovania v jazyku Java
Java - objektovo orientovaný prístup
- >Java - konštruktory
>Java - prístupové metódy
>Java - dedičnosť
>Java - preťažovanie metód
>Java - polymorfizmus
>Java - abstraktné triedy
>Java - rozhrania
Vzorové príklady:
Java - implementácia numerických algoritmov
Java - triedy geometrických tvarov
Pokročilé témy:
Definícia polymorfizmu
Polymorfizmus (viacznačnosť) je schopnosť objektu nadobúdať viacero foriem. Najčastejšie použitie polymorfizmu je vtedy, keď v referencii na triedu rodiča používame odkaz na objekty triedy potomka.
Je dôležité vedieť, že jediný možný spôsob prístupu k objektu je cez referenčnú premennú. Referenčná premenná môže byť len z jedného typu. už definovanému objektu nemožno zmeniť typ.
Referenčná premenná môže byť znovu viackrát priradená iným objektom. Typ referenčnej premennej určuje aké metódy môžeme v rámci objektu volať. Referenčná premenná môže odkazovať ľubovoľný objekt, ktorý má rovnaký typ ako je typ referencie alebo podtypu referencie.[1]
Ilustračný príklad
public interface Vegetarian{}
public class Zviera{}
public class Jelen extends Zviera implements Vegetarian{}
O triede Jelen môžeme tvrdiť:
- Jeleň je zviera (Zviera)
- Jeleň je vegetaríán (Vegetarian)
- Jeleň je Jelen
- Jeleň je objekt (Object)
Vidieť, že na triedu Jelen sa môžeme pozerať viacerými spôsobmi.
Uvzžujme nasledujúce deklarácie:
Jelen j = new Jelen();
Zviera z = j;
Vegetarian v = j;
Object o = j;
Všetky referenčné premenné (j,z,v,o) odkazujú na jeden objekt - inštanciu triedy Jelen.
Virtuálne metódy
V tejto časti ukážeme ako využiť preťažovanie metód v súvislosti s polymorfizmom.
V predchádzajúcej časti sme hovorili o preťažovaní metód. Virtuálna metóda je vlastne preťažaná metóda z rodičovskej triedy. Rozdiel je však v možnosti použitia takejto metódy.
Opäť si zoberme triedy Zviera, Cicavec a Pes. Do týchto doplňme virtuálne metódy toString, ktoré vrátia textovú reprezentáciu daného objektu:
public class Zviera {
public String nazov;
public int vaha;
//konstruktory sa oproti munulému príklady nezmenili
public String toString()
{
return "Zviera: "+this.nazov+", Vaha: "+this.vaha;
}
}
public class Cicavec extends Zviera{
public int dlzka_gravidity;
public String typ_srsti;
//konstruktory sa oproti munulému príklady nezmenili
public String toString()
{
String g= super.toString();
return g+", Gravidita: "+this.dlzka_gravidity+", Srst: "+this.typ_srsti;
}
}
public class Pes extends Cicavec {
public String typPsa;
//konstruktory sa oproti munulému príklady nezmenili
public String toString()
{
String g= super.toString();
return g+", Typ psa: "+this.typPsa;
}
}
Teraz ukážeme použitie viruálnej metódy toString. Princíp je ten, že nebudeme vytvárať referenciu na triedu Cicavec alebo Pes, ale vždy na triedu Zviera:
public class program {
public static void main(String[] args) {
Zviera a = new Zviera("Krokodíl", 200);
Zviera b = new Cicavec("Jelen", 120, 14, "kratka");
Zviera c = new Pes("Vlkolak", 60, 15, "kratka", "divý");
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
Výstupom bude:
Zviera: krokodíl, Vaha: 200 Zviera: Jelen, Vaha: 120, Gravidita: 14, Srst: kratka Zviera: Vlkolak, Vaha: 60, Gravidita: 15, Srst: kratka, Typ psa: divý
Ešte raz poznamenajme, že a, b, c sú referencie na triedu Zviera. Avšak pre tiero referencie používame odkaz na potomka (len pri b, c). O tom, ktorá verzia metódy sa spustí sa rozhodne až pri zavolaní metódy v bežiacom programe. Teda nie pri kompilácii ale pri behu programu.
Zdroje a odkazy
- ↑ tutorialspoint.com - Java Polymorphism http://www.tutorialspoint.com/java/java_polymorphism.htm