Was ist Polymorphismus, wozu dient er, und wie wird er eingesetzt?
Polymorphismus ist die Fähigkeit, eine Klasse von Objekten so zu behandeln, als wäre sie die übergeordnete Klasse.
Nehmen wir zum Beispiel an, es gibt eine Klasse namens Tier und eine Klasse namens Hund, die von Tier erbt. Polymorphismus ist die Fähigkeit, jedes Hund-Objekt wie ein Tier-Objekt zu behandeln, z. B. so:
Dog* dog = new Dog;
Animal* animal = dog;
Normalerweise bezieht sich dies auf die Fähigkeit eines Objekts vom Typ A, sich wie ein Objekt vom Typ B zu verhalten. In der objektorientierten Programmierung wird dies normalerweise durch Vererbung erreicht. Einige Wikipedia-Links, um mehr zu erfahren:
EDIT: fehlerhafte Links korrigiert.
Lassen Sie uns eine Analogie verwenden. Für ein gegebenes musikalisches Skript gibt jeder Musiker, der es spielt, seine eigene Note in der Interpretation.
Der Musiker kann mit Schnittstellen abstrahiert werden, das Genre, zu dem der Musiker gehört, kann eine abstrakte Klasse sein, die einige globale Regeln der Interpretation definiert und jeder Musiker, der spielt, kann mit einer konkreten Klasse modelliert werden.
Als Hörer eines musikalischen Werkes hat man eine Referenz auf das Skript, z.B. Bach's 'Fuga und Tocata' und jeder Musiker, der es aufführt, tut es polymorph auf seine eigene Weise.
Dies ist nur ein Beispiel für ein mögliches Design (in Java):
public interface Musician {
public void play(Work work);
}
public interface Work {
public String getScript();
}
public class FugaAndToccata implements Work {
public String getScript() {
return Bach.getFugaAndToccataScript();
}
}
public class AnnHalloway implements Musician {
public void play(Work work) {
// plays in her own style, strict, disciplined
String script = work.getScript()
}
}
public class VictorBorga implements Musician {
public void play(Work work) {
// goofing while playing with superb style
String script = work.getScript()
}
}
public class Listener {
public void main(String[] args) {
Musician musician;
if (args!=null && args.length > 0 && args[0].equals("C")) {
musician = new AnnHalloway();
} else {
musician = new TerryGilliam();
}
musician.play(new FugaAndToccata());
}