假設我們有一個抽象類A
,我們想強制所有的子類都有一個特定的字段。這在Java中是不可能的,因爲我們不能定義抽象字段。如何解決Java中缺少抽象字段的問題?
解決方法1:強制子類實現傳遞所需值的方法。
abstract class A {
abstract int getA();
}
缺點:每個子類必須實現的,我們希望讓每一個抽象場的方法。這可能導致許多方法實現。
優勢:我們可以使用的方法getA
在抽象類和A
與它實現方法無需在每個子類中實現它們。但是該方法背後的價值不能被抽象類所覆蓋。
解決方法2:通過強制子類爲抽象類提供值來模擬抽象字段。
abstract class A {
int a;
public A(int a) {
this.a = a;
}
}
缺點:當我們有多個領域(> 10),超級構造函數調用會顯得有點醜陋和混亂。
優勢:我們可以使用領域a
在抽象類和A
與它實現方法無需在每個子類中實現它們。另外,值a
可以被抽象類覆蓋。
問題:哪種解決方法是實現目標的常用方法?也許有一個比以上更好的?
我錯過了什麼嗎?爲什麼不簡單地給抽象類一個受保護的*具體*字段?爲什麼渴望「* abstract *」字段?什麼是開始的抽象領域?再一次,我錯過了什麼或沒有理解?我是否過度簡化了您的問題?無論如何,你想要解決什麼行爲問題(而不是代碼問題)? – 2012-07-21 13:39:00
或者您可以提供'getA()'的默認實現,並在需要其他值的位置覆蓋它。 – Keppil 2012-07-21 13:41:06
_你爲什麼要強制所有的子類都有一個字段?這個問題通常更好地表達爲強制他們擁有一個特定的_behavior_,你只需要使用方法規範。 – 2012-07-21 18:34:05