2013-03-28 54 views
0

如果我創建喜歡AA制的基礎對象,以便:擴展類,如果我遵循這種方式,他們會繼承參數嗎?

public abstract class RIBaseObject{ 
    static ObjectRegistry sSystemRegistry = new ObjectRegistry(); 

    public RIBaseObject() { 
    } 

    public abstract void reset(); 

} 

,並在每個(大多數)班我做擴展此基礎對象,考慮ObjectRegistry類包含這樣的參數:

public class ObjectRegistry extends RIBaseObject { 

    public BufferLibrary bufferLibrary; 
    public CameraSystem cameraSystem; 

    public ObjectRegistry() { 
     super(); 
    } 

} 

將宣佈bufferLibrary這在自舉類的方式:

RIBaseObject.sSystemRegistry.bufferLibrary = new BufferLibrary(); 

使它從任何類擴展BaseObject,我會訪問相同的bufferLibra ry對象?或者它會有所不同?

+3

這看起來是一個可怕的圓形設計。一個父類持有其子類型的靜態字段?不,父母不應該依賴他們的孩子。你需要重新考慮你的設計。 – 2013-03-28 02:44:56

+0

這是取自Replica島..我只是想了解那個人是怎麼把他的東西放在一起的。但是,糟糕的設計,我會牢記在心。 – 2013-03-28 02:48:53

回答

0

所有子類將訪問基類相同的靜態變量。 靜態變量每類加載一次,它們不依賴於實例化。

這樣即資料庫中的基礎類定義爲靜態的所有子類都將共享同一個靜態變量。

靜態變量不能被繼承,但可以通過類似定義的變量被稱爲可變隱藏的子類被隱藏。

那麼YES,你會從所有sublclasses訪問同一bufferLibrary。

+0

好吧,因爲sSystemRegistry是靜態的,所以第一次構建RIBaseObject時只有一個新的ObjectRegistry。然後「新」不再意味着新的了,它只是指向已經創建的sSystemRegistry。這是需要點擊我的頭,謝謝。 – 2013-03-28 02:55:12