Polimorfisumul este un concept fundamental īn cadrul
limbajelor orientate pe obiecte.
Pentru
exemplificarea acestui concept se consideră o aplicaţie care
gestionează migrarea păsărilor.
package isp.polimorfism.migratie;
class Bird {
public void
move(){
System.out.println("The bird is
moving.");
}
}
class Penguin extends Bird{
public void
move(){
System.out.println("The PENGUIN is swiming.");
}
}
class Goose extends Bird{
public void
move(){
System.out.println("The GOOSE is flying.");
}
}
public class BirdController{
Bird[] birds = new Bird[3];
BirdController(){
birds[0]
= createBird();
birds[1]
= createBird();
birds[2]
= createBird();
}
public void
relocateBirds(){
for(int
i=0;i<birds.length;i++)
birds[i].move();
}
private Bird
createBird(){
int
i = (int)(Math.random()*10);
if(i<5)
return new Penguin();
else
return new Goose();
}
public static void
main(String [] args){
BirdController
bc = new BirdController();
bc.relocateBirds();
}
}
Īn aplicaţia anterioară se construieşte o ierarhie de
clase avānd clasa de bază Bird. Fiecare dintre
clasele derivate extinde această clasă şi suprascrie metoda move pentru a implementa metoda de deplasare specifica
fiecărei păsări. Clasa BirdController
controlează un grup de păsări care sunt memorate īn cadrul unui
vector de tip Bird.
In momentul īn care este apelată metoda relocate()
din BirdControler, aceasta va parcurge lista de
obiecte din cadrul vectorului birds şi va invoca
metod move() corespunzătoare tipului de obiect (Penguin sau Goose). Rezultatul
este ca pinguinul va īnota iar gasca va zbura pentru
a realiza migrarea, chiar daca clasa BirdControler pastreaza referinte doar spre
clasa Bird. De observar
faptul că īn momentul compilării aplicaţiei nu se poate
cunoaşte care metodă move din cadrul
cărei clase va fi apelată pentru fiecare obiect din cadrul vectorului
birds.
Acest comportament de descoperire dinamică īn timpul rulării a
tipului concret al unui obiect din cadrul unei ierarhii de tipuri se
numeşte polimorfism. Polimorfismul şi moştenirea ne permit
să manipulăm īn mod unitar colecţii de obiecte ce īmpart
caracteristici comune definite prin intermediul unui tip de bază (clase de
bază).
EXERCITIU: Construiţi un proiect Eclipse şi adăugaţi
īn cadrul lui aplicaţia de mai sus. Testaţi aplicaţia.
Adăugaţi īn cadrul aplicaţie o nouă specie de pasări
şi testaţi din nou.