Beispiele zur Vererbung
Abgeänderte Main-Klasse, die eine Welt von Elefanten und Mäusen aktiviert.
|
public class Main {
public Main() {
}
public static void main(String[] args) {
//Main main1 = new Main();
Tier dumbo = new Elefant();
Tier jerry = new Maus();
System.out.print("Alter von dumbo: ");
dumbo.printAlter();
dumbo.laufe();
System.out.print("Alter von jerry: ");
jerry.printAlter();
jerry.laufe();
jerry = dumbo;
jerry.laufe();
}
}
|
|
Klasse Tier, erbt von Objekt, und ist Vater aller Elefanten und Mäuse:
|
public class Tier extends Object {
public Tier() {
}
public int alter = 3;
public void printAlter(){
System.out.println(alter);
}
public void laufe(){
System.out.println("laufe");
}
}
|
|
Und nun kommen sie, all die Elefanten und Mäuse:
|
public class Elefant extends Tier {
public Elefant() {
}
public void laufe(){
System.out.println("Trapp Trapp");
}
}
|
|
|
public class Maus extends Tier {
public Maus() {
}
public void laufe(){
System.out.println("Trippel Trippel");
}
}
|
|
Als Ergebnis erhalten wir Folgendes:
|
Alter von dumbo: 3
Trapp Trapp
Alter von jerry: 3
Trippel Trippel
Trapp Trapp
|
|
Wir sehen: Obwohl wir immer an einer Objektreferenz vom Typ Tier die Methode
laufe rufen, ergeben sich unterschiedliche Ausgaben. Das liegt an der Polymorphie
(unterschiedliche Objekte verhalten sich bei gleichem Methodenruf unter
Umständen unterschiedlich) und an der späten Bindung. Der
Compiler trifft Vorkehrungen, dass er zwar für den Typ Tier eine Methode laufe
aktivieren will, dass er aber zur Laufzeit (eben spät) je nachdem auf was für
eine Instanz er trifft entscheiden kann, welche Methode wirklich gerufen wird.