Die Superklassenreferenzvariable kann das Unterklassenobjekt enthalten, aber mit dieser Variablen können Sie nur auf die Mitglieder der Oberklasse zugreifen. Daher wird empfohlen, immer auf die Elemente beider Klassen zuzugreifen Referenzvariable für die Unterklasse.Schwierigkeit mit dem Konzept der Java-Vererbung und des Überschreibens
class Animal {
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
System.out.println("Dogs can walk and run");
}
public void bark() {
System.out.println("Dogs can bark");
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move(); // runs the method in Animal class
b.move(); // runs the method in Dog class
b.bark();
}
}
Ausgang:
TestDog.java:26: error: cannot find symbol
b.bark();
^
symbol: method bark()
location: variable b of type Animal
1 error
Was ich nicht verstehe, ist hier, warum das Objekt ‚b‘ in der Lage, um das Dog.move() und nicht Dog.bark(), weil die URL oben besagt, dass es nur auf die Mitglieder der Oberklasse und nicht auf die Unterklasse zugreifen kann. Nach dieser Logik sollte die Ausgabe von b.move() "Tiere können sich bewegen" und nicht "Hunde können laufen und laufen". Aber das ist nicht der Fall. Kann mir jemand dabei helfen? Vielen Dank im Voraus!
b.bark typecasting(); ist falsch, weil Animal nicht bellt.Ein Downcasting ist erforderlich wie: ((Hund) b) .bark(); –