[英]How to access a specific subclasses methods in Java?
嗨,我有一個Property類和2個Shop和Apartment子類。
在另一堂課中,我有一個由商店和公寓組成的屬性數組列表。 我有代碼:
for(Property prop: properties){
if(prop.getClass().equals(Shop.class))
prop.setShopDetails(detail);
else
prop.setAppDetails(detail)
}
如何訪問shop類中的setShopDetails()方法?
您需要將prop
投放到Shop
:
for(Property prop: properties){
if(prop.getClass().equals(Shop.class))
((Shop) prop).setShopDetails(detail);
else
((Apartment) prop).setAppDetails(detail)
}
}
但是,更好的方法是在Property
類中定義抽象方法setDetails
,並在每個子類中以不同的方式實現它。 您可能還想使用prop instanceof Shop
而不是prop.getClass().equals(Shop.class)
。
首先,考慮prop
是Shop
的子類的情況。 您的if條件將返回false
! 這是使用instanceof運算符的最佳時機。
為了訪問這些方法,您需要將對象強制轉換為正確的子類:
if(prop instanceof Shop) {
Shop s = (Shop) prop;
s.setShopDetails(details);
} else {
// you get the idea
}
但是,這種擊敗了多態性的目的。 為什么不在Property
創建setDetails
方法並允許子類如何處理呢?
首先,在這種情況下必須調用getClass()
的事實通常表明設計有誤。 您可能希望有一個被子類覆蓋的abstract
setDetails
方法。
您要查找的語言功能是“廣播”。 在調用子類方法之前,您要像這樣強制轉換Property
:
((Shop)prop).getShopDetails(detail);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.