2015-11-21 65 views
0

請考慮以下情況。 你有一個狗類和一個貓類,它們都擴展了類動物。 如果您創建一個動物數組例如。從超類的數組調用子類的方法

Animal[] animals = new Animal[5]; 

在該陣列中隨機貓和狗被設置爲每個元素。 如果Dog類包含方法bark()且Cat類不包含,那麼將如何根據數組調用此方法?例如。

animals[3].bark(); 

Iv'e試圖投射元素,我正在審查一隻狗,但無濟於事。

(Dog(animals[3])).bark(); 

回答

1

方法1:使用(不推薦)instanceof

if (animals[3] instanceof Dog) { 
    ((Dog)animals[3]).bark(); 
} 

選項2:加強Animal與抽象方法:

public abstract class Animal { 
    // other stuff here 
    public abstract void makeSound(); 
} 
public class Dog extends Animal { 
    // other stuff here 
    @Override 
    public void makeSound() { 
     bark(); 
    } 
    private void bark() { 
     // bark here 
    } 
} 
public class Cat extends Animal { 
    // other stuff here 
    @Override 
    public void makeSound() { 
     meow(); 
    } 
    private void meow() { 
     // meow here 
    } 
} 
+0

太感謝了,原來我的鑄造方法(狗(動物[3]))。樹皮();'到((狗)動物[3])。樹皮();' – TheBoxOkay