簡體   English   中英

將子類存儲在超類數組中並使用子類方法(Java)

[英]Store subclass in an array of superclasses and use methods of subclass (Java)

我的問題如下:

我有一個名為Product的抽象類和2個名為Book and Magazine的子類。 雜志有一個額外的方法,在產品或書籍中找不到。

到現在為止還挺好。 但我想將這些不同的產品存儲在1個數組中,如下所示:

List<Product> products = new ArrayList<>(); products.add(new Book()); products.add(new Magazine());

還沒問題吧? 但是在這一點上我也想這樣做(索引1是雜志):

products.get(1).magazineMethod()

這就是一切都變得平坦的地方。 我知道instanceof以及如何解決我的問題。 然而,在google搜索並查看stackoverflow時,似乎在這個問題上使用instanceof是不好的。 對於每個不同的Product子類,我都必須使用instanceof添加另一個檢查。 我問老師這件事,他不能給我一個正確的答案,並告訴我他會檢查出來。

我知道多態如何工作,如果產品也有magazineMethod()它會工作。 但這沒有任何意義,因為產品不是雜志,這樣做會破壞整個繼承點。

是的,這是家庭作業的一部分,但我心中的問題是如此根本,以至於我想要正確的解決方案,而不是一些解決方法/ hackjob。

從根本上說,你不能。 如果您的變量是Foo類型,則只能使用Foo或Foo父項的函數。

解決方法:

  • 在將彈匣傳遞到陣列之前,還要將其存儲在Magazine類型的變量中,並在使用彈匣功能時參考該變量

  • 在致電之前將產品投入雜志

  • 而不是magazineMethod(),有一個適用於書籍和雜志的通用方法,子類重寫了這種行為。

第三種選擇通常是最好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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