如果我有一個名爲Animal的超類,而子類叫做Cat,Dog,Bird。Java:使用getClass獲取子類引用
如果我讀了一組動物,並且想要訪問一個名爲meow()的Cat特定方法,我該怎麼做?
我知道我可以使用的getClass()來找出動物的子類,但我如何使用它來創建一個參考訪問喵()
如果我有一個名爲Animal的超類,而子類叫做Cat,Dog,Bird。Java:使用getClass獲取子類引用
如果我讀了一組動物,並且想要訪問一個名爲meow()的Cat特定方法,我該怎麼做?
我知道我可以使用的getClass()來找出動物的子類,但我如何使用它來創建一個參考訪問喵()
可以轉換爲Cat
if (animal.getClass().getName().equals('Cat')) {
((Cat)animal).meow();
}
或者你可以使用instanceof
。
這兩種解決方案都很醜陋,而且Java並沒有被設計用於這種方式。相反,您應該爲可以在內部調用Cat.meow
的動物創建一個.speak
方法。
一旦找到想要使用的子類,就可以對其進行強制轉換。在你的情況下,將
((Cat)animals[index]).meow();
如果您正在使用的animal
秒的數組,你需要檢查你正在使用的對象是否爲Cat
類的實例,這可以通過使用instanceof操作來實現。然後我們可以使用downcasting運算符將Animal
轉換爲Cat
,然後調用meow()
方法。
if(animal instanceof Cat){
(Cat)animal.meow()
}
使用數組
Animal [] animals = [];
foreach(Animal animal: animals){
//do something
if(animal instanceof Cat){
(Cat)animal.meow()
}
}
@stumped:這是做你想做的更正確的方式。 – ankurtr 2013-02-25 03:45:19
您可能必須更改爲使用'instanceof',因爲您可能也已經劃分了'Cat'類,您可能還想調用'meow'方法。 – 2013-02-25 03:51:17
感謝您的所有意見。 – stumped 2013-02-25 06:39:36