2016-05-13 6 views
-1

Ich habe übergeordnete Klasse Tier und Unterklasse DogWarum Instanzvariable keine Methode aufrufen, in Upcasting nicht überschreiben?

public class Animal { 
public void bark() { 
    System.out.println("sua"); 
} 

}

und

public class Dog extends Animal { 
public void bark() { 
    System.out.println("Go go"); 
} 
public void eat(){ 
    System.out.println("an com"); 
} 

}

und Klasse Haupt

public class MainDemo { 

public static void main(String[] args) { 
    Animal animal = new Dog(); 
    animal.bark(); 
    animal.eat(); 
} 

}

warum Instanz Tier nicht Methode aufrufen essen, während Polymorphismus Laufzeit

Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method eat() is undefined for the type Animal

at tinhdahinh.MainDemo.main(MainDemo.java:8) 

Antwort

0

Die Basisklasse muss jede Methode deklarieren, die von abgeleiteten Klassen überschrieben wird. Es muss sie nicht implementieren, aber die Methode muss so deklariert werden, dass, wenn ein abgeleitetes Objekt der Basisklasse die Methode aufruft, der virtuelle Despatcher weiß, wie er den Aufruf an den richtigen Ort leitet. In Animal Klasse, fügen Sie diese Erklärung:

abstract void eat(); 

Dieser Ansatz Kräfte Klassen abgeleitet eat Verfahren zu implementieren. Wenn Sie keine eat-Methode erzwingen möchten, geben Sie eine leere Implementierung an:

public void eat() { } 
Verwandte Themen