我有一個抽象類叫做MyAbstractClass。抽象類抽象方法的部分實現
我具有延伸其5個不同的類:類A,B,..È
我需要在類中添加的方法FOO ()MyAbstractClass但僅A,B和C 應該實現它,而D和E將永遠不需要執行它。 (程序流程不會到達那裏)
在Java中實現這種行爲會是一個好的做法嗎?
我應該使用接口嗎?
我應該添加另一層繼承兩個區分他們和添加foo只在中間層?
感謝您的任何建議。
我有一個抽象類叫做MyAbstractClass。抽象類抽象方法的部分實現
我具有延伸其5個不同的類:類A,B,..È
我需要在類中添加的方法FOO ()MyAbstractClass但僅A,B和C 應該實現它,而D和E將永遠不需要執行它。 (程序流程不會到達那裏)
在Java中實現這種行爲會是一個好的做法嗎?
我應該使用接口嗎?
我應該添加另一層繼承兩個區分他們和添加foo只在中間層?
感謝您的任何建議。
我在這裏看到的三種基本方法:
子類什麼都不做,如果該方法被稱爲
在這種情況下,你可以記錄通話或警告,它被稱爲,僅僅別的什麼都別做。
孩子上課不應該執行方法
在這種情況下,你可能會引發UnsupportedOperationException
。
d和E比[A,B,和C]
如果三個執行類在從d和E不同的方式類似,可考慮將一個父類三種根本不同這本身就是你的超類的孩子。然而,如果所有五個類別代表相似的概念,這可能是沒有意義的。
做出A,B和C
的接口如餘德耀和英子的建議,你可以爲僅A,B和C實現這個特定方法的接口。如果您正在處理超類參考類型,那麼您可以檢查是否obj instanceof MyInterface
以確定是否應該運行該方法。
如果您使用的是Java 8+,並且A,B和C的方法在功能上沒有區別,那麼您可以在所有實現類都可以使用的接口中定義default
方法。
我看到兩種方法:的foo
在不執行任何操作(空法)父類
化妝默認實現沒有把它抽象。在這種情況下,您可以根據需要重寫派生類中的方法。
創建包含foo
的接口並在A
,B
和C
中實現該接口。在這種情況下,您需要檢查一個對象是否正在實現具有對MyAbstractClass
變量中對象的引用的接口,然後才能實際調用foo
。
沒有類似的解決方案,使用只有A,B和C實現的接口(例如「Interface Fooable」),而不管抽象類如何? – yuz
我會添加切換到接口的選項,也許默認實現(如果Java 8或更新,並且它「足夠無狀態」)。 – Eiko