2013-02-14 14 views
0

我有一個叫做策略抽象類,和兩個子類DepreciablePolicy和ExpirablePolicy 我有策略的數組,政策[]檢查什麼子類的對象是,則運行在該子類的方法 - Java的

我想要檢查我的對象在哪個子類(如果它是策略,DepreciablePolicy或ExpirablePolicy)

我通過使用此if語句執行了此操作。

if (this.policies[polNum] instanceof DepreciablePolicy){ 

對於每種類型的子類,都有一個不同的方法,我必須運行。 唯一的問題是我只能使用策略方法,而不能使用子類方法或構造函數。 有沒有辦法可以做到這一點?

回答

5

這是繼承做錯了方式。多態性的要點是你的代碼不關心對象是哪個子類。任何你需要做的事情都應該通過政策來表達,這應該是一個真正的接口。您的代碼應該與基於該接口的策略交互,並且子類選擇如何作出反應。

話雖這麼說,你可能會尋找簡單的下鑄造:

DepreciablePolicy d = (DepreciablePolicy) policy; 

這只不過是一個可憐的繃帶更好的一個不好的設計,雖然。

+0

我同意 - 按照規定,問題的答案顯然是使用類型轉換 - 但重新設計可能會更好。 – codefactor 2013-02-14 02:18:37

+0

謝謝,我會使用這種方法,直到我找出正確的方法 – user1692517 2013-02-14 02:26:32

5

對於每種類型的子類,都有一個不同的方法,我必須運行。

然後你錯誤地設計了它。在Policy中定義一個抽象方法,讓所有的派生類根據自己的需求來實現它。然後調用該方法。

+0

我剛開始使用Abstract。我想重新設計我的項目。我試着用谷歌搜索如何實現派生類,但沒有什麼可以提到的。你能幫我解決我該怎麼做嗎? – user1692517 2013-02-14 02:26:08

+1

@ user1692517:您應該重新使用不同的搜索字詞,因爲在很多教程中已經對此進行了很好的討論。如果你堅持這樣做,不要要求人們重新編寫完整的教程,而是請告訴我們*確切地說*你可能被卡住並顯示代碼的地方。 – 2013-02-14 02:39:55