Am deutlichsten lässt sich Polymorphismus durch eine abstrakte Basisklasse (oder Schnittstelle) ausdrücken
public abstract class Human{
...
public abstract void goPee();
}
Diese Klasse ist abstrakt, weil die goPee()
Methode ist für Menschen nicht definierbar. Sie ist nur für die Unterklassen Male und Female definierbar. Außerdem ist Human ein abstraktes Konzept - Sie können keinen Menschen erstellen, der weder männlich noch weiblich ist. Er muss entweder das eine oder das andere sein.
Wir verschieben also die Implementierung, indem wir die abstrakte Klasse verwenden.
public class Male extends Human{
...
@Override
public void goPee(){
System.out.println("Stand Up");
}
}
y
public class Female extends Human{
...
@Override
public void goPee(){
System.out.println("Sit Down");
}
}
Jetzt können wir einem ganzen Raum voller Menschen sagen, dass sie pinkeln gehen sollen.
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();
}
Die Ausführung würde Folgendes ergeben:
Stand Up
Sit Down
...