Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie.

texs89

Mitglied
Hallo,
wie kann ich die Methode der Oberklasse aufrufen? Ich caste unten das Objekt hund1 in ein Tier und rufe die Methode sprechen() auf. Es wird aber nur 2 mal "Ich bin ein Hund" ausgegeben. Warum?

Java:
public class Tier {
    public void sprechen() {
        System.out.println("Ich bin ein Tier.");
    }
}

public class Hund extends Tier {
    public void sprechen() {
        System.out.println("Ich bin ein Hund.");
    }
}

public class Main {
    public static void main(String[] args) {
        Tier hund1 = new Hund();
        hund1.sprechen(); // gibt "Ich bin ein Hund." aus
        ((Tier) hund1).sprechen(); // soll "Ich bin ein Tier." ausgeben
    }
}
 
Du kommst von außen nicht an die Methode sprechen der Klasse Tier dran. Das soll bewusst so sein und ist einer der Grundpfeiler der Polymorphie. Es wird von außen immer die Methode der echten Instanz (hier Hund) aufgerufen, egal wie die Variable definiert ist.

Was geht ist in der Klasse auf die Methoden der Oberklasse zuzugreifen. Das heißt, du könntest die Methode sprechen z.B. so schreiben

Java:
public class Hund extends Tier {
    public void sprechen() {
        System.out.println("Ich bin ein Hund.");
        super.sprechen();
    }
}
In der Klasse kann auf die Methoden der Oberklasse mittels einem davorgestellen super zugegriffen werden - aber von außen geht es nicht.
 

Zurück
Oben