我只學習多態,所以對我來說很簡單(直接從本書複製)。我嘗試將一個類作爲參數傳遞給一個方法。當我這樣做時,我可以調用超類方法,但不能調用實際的子類。使用start()方法,我儘量讓狼嗥:多態參數適用於超類,但不適用於子類
public class experiment {
public static void main(String[] args) {
PetOwner own = new PetOwner();
own.start();
}
}
//Trying polymorphic arguments
class Vet {
public void giveShot(Animal a) {
a.howl();
}
}
class PetOwner {
public void start() {
Vet v = new Vet();
Wolf w = new Wolf();
v.giveShot(w);
}
}
//Inheritance//
//Kingdom - Animal
class Animal {
public void move() {
System.out.println("*motions softly*");
}
}
//Family - canine
class Canine extends Animal {
public void bark() {
System.out.println("Woof!");
}
}
//Species - wolf
class Wolf extends Canine {
public void howl() {
System.out.println("Howl! Howl!");
}
}
如果我通過嗥方法對超(動物),它工作正常。如果我直接從狼類中調用它 - 它工作正常。唯一不起作用的例子是如果我試圖通過狼類作爲參數並從那裏調用它。
這是爲什麼我嘗試這種方式,從頭部的第一個Java第187報價:
獸醫的giveShot()方法可以把你給它的任何動物。只要 的對象,你作爲這種論點是子動物,它 將工作
我得到一個「找不到符號符號:方法嗥(),將動物的位置變量」錯誤。
權從第一個答案:*標識符應該是方法的名字:* '也許你正在試圖指繼承的方法,這是不在父/祖先類或接口中聲明。' – GhostCat
@GhostCat我已經在書中特別聲明瞭它的引用 - 獸醫的giveShot()方法可以接受任何你給它的動物。只要你作爲參數的對象是動物的*子類*,它就可以工作 –