2017-04-04 30 views
1

我的問題是如下:店子類(JAVA)

我有一個抽象類,稱爲產品和2+子類稱爲書和雜誌。雜誌有一種額外的方法,在產品或書籍中找不到。

到目前爲止這麼好。但我想在1陣列中存儲這些不同的產品,像這樣:

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

還是沒有問題吧?然而,在這一點上,我也想這樣做(指數1爲雜誌):

products.get(1).magazineMethod()

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

我知道多態性是如何工作的,如果產品也有magazineMethod(),它會起作用。但這是沒有意義的,因爲產品不是雜誌,這樣做會打敗整個繼承點。

是的,這是家庭作業的一部分,但我腦海中的問題是如此重要,以至於我想要適當的解決方案而不是一些解決方法/ hackjob。

+0

如果你的集合是'Product'類型,你爲什麼要調用'magazineMethod'? – user7

+0

@ user7因爲它是Magazine類的一個屬性的getter,它不在Product或Book中。 – Tryphon

回答

2

基本上,你不能。如果你的變量是Foo類型的,你只能使用Foo或Foo父母的函數。

解決方法:

  • 傳遞雜誌到陣列中,也將其存儲在類型雜誌的變量,並使用雜誌功能

  • 角色該產物雜誌時指的是變量之前在致電

  • 而不是magazineMethod()後,有一種適用於書籍和雜誌的通用方法,其行爲由子類重寫。

第三個選項通常是最好的。