Polimorfismul

Polimorfisumul este un concept fundamental în cadrul limbajelor orientate pe obiecte.

Comportamentul prin care se descoperain mod dinamic în timpul rulării tipul 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ă (clasa de bază).

Pentru exemplificarea acestui concept se consideră o aplicaţie care gestionează migrarea păsărilor.

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.