2016-07-16 87 views
0

所以我有這個類(我們稱之爲「A」)與這個get()方法,它返回一個類字段,我想從另一個類(「B」)訪問。 重要提示:兩個班都是abstract這些類別與packageAB成員均爲package private)相同。 Main類沒有包(或更好,默認的)。如何從(默認包)訪問包中的非靜態類字段?

[之前:扭曲的和無用的描述]

我從B類需要訪問Aget()方法。

試圖用:

1)非靜態呼叫Aobj.get()main - 位於根對象開始,但它似乎要的靜態調用(怪異,沒有成員是static);

2)試圖靜態訪問它,我得到了Cannot make a static reference to the non-static field錯誤(當然)。

...所以我被困住了,仍然得到訪問語法錯誤,我嘗試了兩種方式。有什麼建議?

編輯:

於是我走到了盡頭。我現在試着解釋我的錯誤。

基本上,問題是我想要訪問位於包中類的Main類(默認包)中的對象。所以我有一個可見性問題。

在其他情況下,我會解決導入類,但我想通了,you cannot import a class located in the default package,所以我創建了一個main封裝,B一流的進口Main類。

我就繼續做的最糟糕的錯誤是想法,我不得不訪問來自main本身,這是一個真的很糟糕思想(仍然想不通我怎麼想它的main.main(String[])... etc ...Aobj開始)。

事實上,像斯蒂芬ç指出:

的是真實的,不論搭配套餐的情況下,也不論你採取過其他類的路徑。

最後,代碼示例...說實話,代碼現在真的和我寫這個問題的日子不同了,老實說我不能重現錯誤的條件,因爲我不記得所有的我試圖實現的錯誤邏輯。 (我的錯。)我只希望這次能夠正確解釋自己。

感謝大家試圖幫助。

+2

請參閱:http://stackoverflow.com/help/mcve – 2016-07-16 03:33:24

回答

2

如果B的get()方法不是static那麼如果要調用該方法,則需要B的實例;例如

B b = .... 
    b.get(); 

的是真實的不論搭配套餐的情況不論你採取過其他類的路徑,諸如此類的。 (雖然我不確定我完全理解你所有的那些「散文」描述......)

+0

我試圖盡我所能來形容它,但我知道如果沒有代碼示例,就很難實現這種情況。我會嘗試添加一個,現在感謝 –

+0

我認爲,示例代碼肯定會更清晰地表達這一點。 –

2

從你所描述的內容(無代碼),你需要訪問一個b的實例。有幾種方法可以實現。如果A方法有問題可以使用不同的B實例每次調用,只需添加一個B參數傳遞給方法:

public class B { 

    public int get() { //Or whatever the return type of get is 
     //... 
    } 

} 

public class A { 

    public int methodThatNeedsABInstance(B instance) { 
     int x = instance.get(); //Can call get method 
    } 

} 

然後由稱爲:

B b = new B(); 
A a = new A(); 
a.methodThatNeedsABInstance(b); 

如果每個A實例應該使用相同的B實例進行所有調用,使其成爲B類型的字段:

public class A { 

    private B instance; 

    //Constructors, setters and getters for b as necessary  

    public int methodThatNeedsABInstance() { 
     int x = instance.get(); //Can call get method 
    } 

} 
+0

非常有幫助,但是我不能instanciate'A'和'B':它們都是'abstract'。 –

+0

所以.....實例化'B'的子類? – Mshnik

+0

沒有。 –