Ich habe jetzt Vererbung und Polymorphie kennengelernt. Erst mal eine Frage: Was ist Polymorphie eigentlich? Denn in meinem Buch wird das irgendwie nicht so gut erklärt...
Und noch etwas: Ich habe diesen Code:
Java:
classHundeartig{voidbellen(){System.out.println("Wuff! Wuff!");}voidgehen(){System.out.println("Lauf");}}classWolfextendsHundeartig{voidbellen(){System.out.println("GRRRR!");}}publicclassStart{publicstaticvoidmain(String[] args){Hundeartig hund =newHundeartig();Hundeartig wolf =newWolf();
hund.bellen();
wolf.bellen();
wolf.gehen();}}
So es klappt alles wunderbar. Die Ausgabe ist "wuff", "grrr", "lauf".
Aber der Code funktioniert immer noch, wenn ich die letzten paar Zeilen ändere:
Wikipedia:
Polymorphie (griechisch, „Vielgestaltigkeit“) ist ein Konzept in Programmiersprachen, das die Fähigkeit eines Bezeichners beschreibt, abhängig von seiner Verwendung unterschiedliche Datentypen anzunehmen.
Das drückt es ziemlich gut aus. Wie du in deinem Beispiel schon zeigst, kannst du einer Variable vom Typ Hund auch einen Wolf zuweisen (weil Wolf von Hund-eartig erbt). Nebenbei: Die Klasse sollte Hund sein, Hundeartig passt von der Benennung eher zu einem Interface.
Zu deinem 2ten Problem:
Natürlich funktioniert es dann noch, muss es ja auch. Der unterschied ist eben, dass du einer Variable vom Typ Wolf eben kein Hundeartig - Objekt zuweisen kannst. Die Antwort, warum das so ist, sollte dir Aufschluss geben: Durch die Vererbung hat der Wolf alle Methoden geerbt, die man an dem Hundeartig aufrufen konnte. Wolf hat demnach alle Methoden eines Hundes und mehr(!). Anders herum ist das eben nicht so: Der Wolf könnte noch mehr Methoden haben als die Klasse von der er erbt.
Der Sinn ist eben, dass du durch Vererbung das Verhalten (Methoden) und den Zustand (Attribute) erben und erweitern/verändern kannst, ohne alles neu schreiben zu müssen UND die Verarbeitung durchzuführen.
Auswirkung hat das vorallem wenn du class abfragen willst,
oder bei Arrays/listen ...
Java:
//Angenommen du hast noch eine eigene Klasse 'Hunde extends Hundeartige' angelegtHund raubtiereH[10];// können NUR Hunde seinWolf raubtiereW[10];// können NUR Wölfe seinHundartige raubtiere[10];// können Hunde oder Wölfe sein
raubtiereW[0]=newHund();// Päng
raubtiereW[0]=newWolf();// OK
raubtiereW[0]=newHundartige();// Päng
raubtiereH[1]=newHund();// OK
raubtiereH[1]=newWolf();// Päng
raubtiereH[1]=newHundartige();// Päng
raubtiere [2]=newHund();// OK
raubtiere [2]=newWolf();// OK
raubtiere [2]=newHundartige();// OK