Objekt je polymorfický, keď je inštanciou viac ako jednej triedy. Vďaka polymorfizmu si vieme skrátiť a zjednodušiť kód, ale tak ako je to aj so všetkým ostatným, vieme si to aj poriadne skomplikovať.
00:00 – 02:00 Čo je to polymorfizmus
02:01 – 04:56 Príklad – muž a človek
04:57 – 06:48 Kedy je objekt polymorfický
06:49 – 15:45 Typy polymorfizmu (statický a dynamický)
15:46 – 19:35 Další príklad polymorfizmu
19:36 – 19:35 Výhody a nevýhody polymorfizmu
27:03 – Zhrnutie a záver + pár užitočných tipov
V Jave, ale aj v iných OOP jazykov vieme vytvoriť v triede viaceré metódy s tým istým názvom, dokonca aj s tou istou návratovou hodnotou, ale s inými parametrami.
Toto sa nazýva method overloading. Vieme to teda docieliť nasledujúcimi spôsobmi:
Kedže metódy majú iné parametre, tak metódy majú tým pádom inú signature.
Toto je statické, čiže compiler vie, ktorú metódu má v ktorom prípade použiť.
Táto forma polyformizmu nedovolí compileru dopredu vedieť, ktorú metódu bude treba zavolať. JVM (v pripade Javy) sa bude musieť rozhodnúť počas runtime.
Dynamickž polymorfizmus sa dá dosiahnuť pomocou method overriding. A toto sa dá dosiahnut ako sme už aj spomínali:
Práve vďaka dynamickému polymorfizmu vieme robiť “divočiny”.
Abstraktná trieda Animal, ktorá obsahuje spoločné vlastnosti a chovania zvierať. Obsahuje metódu move(), ktorú musia deti tejto triedy implementovať.
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
abstract void move();
}
Tri triedy (Horse, Bird, Fish), ktoré dedia od Animal. Každá implementuje metódu move() inak.
class Horse extends Animal {
public Horse(String name) {
super(name);
}
@Override
void move() {
System.out.println("Riding");
}
}
class Bird extends Animal {
public Bird(String name) {
super(name);
}
@Override
void move() {
System.out.println("Flying");
}
}
class Fish extends Animal {
public Fish(String name) {
super(name);
}
@Override
void move() {
System.out.println("Swimming");
}
}
Výhodu polymorfizmu môžeme vidieť na nasledujúcom snippete. Trieda ZooService obsahuje metódu moveAnimal, ktorá má parameter typu Animal. Ja do tejto metódy môžem poslať ale všetky jej deti, resp hocijakého koňa, vtáka či ryby.
class ZooService {
...
void moveAnimal(Animal animal) {
animal.move();;
}
}
...
Bird bird = new Animal("bird"); // Mozem vytvorit instanciu takto
Bird bird2 = new Bird("bird"); // Aj takto, je to jedno a to iste
Horse horse = new Horse("horse");
Fish fish = new Fish("fish");
zooService.move(bird); // vypise "Flying"
zooService.move(bird2); // vypise "Flying"
zooService.move(horse); // vypise "Riding"
zooService.move(bird); // vypise "Swimming"
...
Jakubova hra, ktorá učí základné koncepty OOP
Stará dobrá Wiki
OOP pre 6 ročných