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.