La manière la plus claire d'exprimer le polymorphisme est d'utiliser une classe (ou une interface) de base abstraite.
public abstract class Human{
...
public abstract void goPee();
}
Cette classe est abstraite car le goPee()
n'est pas définissable pour les humains. Elle n'est définissable que pour les sous-classes Male et Female. De plus, Human est un concept abstrait. Vous ne pouvez pas créer un humain qui ne soit ni Male ni Female. Il faut que ce soit l'un ou l'autre.
Nous différons donc l'implémentation en utilisant la classe abstraite.
public class Male extends Human{
...
@Override
public void goPee(){
System.out.println("Stand Up");
}
}
et
public class Female extends Human{
...
@Override
public void goPee(){
System.out.println("Sit Down");
}
}
Maintenant on peut dire à une pièce entière pleine d'humains d'aller faire pipi.
public static void main(String[] args){
ArrayList<Human> group = new ArrayList<Human>();
group.add(new Male());
group.add(new Female());
// ... add more...
// tell the class to take a pee break
for (Human person : group) person.goPee();
}
En exécutant ceci, on obtiendrait :
Stand Up
Sit Down
...
0 votes
Les réponses ci-dessous expliquent très bien le polymorphisme. Mais j'ai une forte objection à dire que la surcharge est un type de polymorphisme, que j'ai essayé de justifier dans ma question et réponse qui se concentre en fait sur la surcharge est polymorphisme ou non. J'ai essayé de justifier la réponse de @The Digital Gabeg présente dans ce fil. Voir Élaboration : La surcharge des méthodes est une liaison statique/du temps de compilation mais pas le polymorphisme. Est-il correct de corréler la liaison statique avec le polymorphisme ?