Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
class Hundeartig {
void bellen() {
System.out.println("Wuff! Wuff!");
}
void gehen() {
System.out.println("Lauf");
}
}
class Wolf extends Hundeartig {
void bellen() {
System.out.println("GRRRR!");
}
}
public class Start {
public static void main(String[] args) {
Hundeartig hund = new Hundeartig();
Hundeartig wolf = new Wolf();
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:
Java:
public class Start {
public static void main(String[] args) {
Hundeartig hund = new Hundeartig();
(!)Wolf (!)wolf = new Wolf();
hund.bellen();
wolf.bellen();
wolf.gehen();
Also was verändere ich eigentlich, wenn ich hundeartig in wolf umwandle?
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' angelegt
Hund raubtiereH[10]; // können NUR Hunde sein
Wolf raubtiereW[10]; // können NUR Wölfe sein
Hundartige raubtiere[10]; // können Hunde oder Wölfe sein
raubtiereW[0] = new Hund(); // Päng
raubtiereW[0] = new Wolf(); // OK
raubtiereW[0] = new Hundartige(); // Päng
raubtiereH[1] = new Hund(); // OK
raubtiereH[1] = new Wolf(); // Päng
raubtiereH[1] = new Hundartige(); // Päng
raubtiere [2] = new Hund(); // OK
raubtiere [2] = new Wolf(); // OK
raubtiere [2] = new Hundartige(); // OK