簡體   English   中英

如何在Java中訪問特定的子類方法?

[英]How to access a specific subclasses methods in Java?

嗨,我有一個Property類和2個ShopApartment子類。

在另一堂課中,我有一個由商店和公寓組成的屬性數組列表。 我有代碼:

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)

首先,考慮propShop的子類的情況。 您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM