我有幾個類都繼承相同的基類,需要有一個靜態屬性在啓動時在函數中初始化。我這樣實現它:受保護的靜態成員的繼承類
public abstract class Base {
protected static Model model;
}
public class Inherited extends Base {
static {
model = initializationFunction();
}
}
public class OtherInherited extends Base {
static {
model = otherInitializationFunction();
}
}
// Example of use
Base[] inheriteds = new Base[] { new Inherited(), new OtherInherited() };
for (int i = 0; i < inheriteds.length; i++) {
doStuff(inheriteds[i]).model; // This will always use the same model (last defined)
}
所以類在開始時初始化靜態成員。但它似乎爲整個基類設定了模型的價值,所以所有的類實際上都有相同的模型。
我需要model
是靜態的,因爲它需要每個子類只存在一次。我的問題是如何爲每個子類創建一個靜態模型,同時仍然確保它在父類中定義(所以如果一個類沒有定義它,它在父類中定義)。
受保護靜態成員在繼承類中的預期行爲是什麼?我應該如何去讓每個類的這個成員的版本仍然是靜態的(我不希望它爲每個實例重複)?
的靜電場屬於基地,無論你來自哪裏,訪問它。 –
這很簡單 - 靜態對象引用只存在一次。你爲什麼把它變成靜態的? – home
如果模型綁定到子類,那麼它應該在子類中聲明,而不是在基類中聲明。 –