[英]How to access non-static class fields in a package from the (default package)?
因此,我有一個帶有此get()
方法的類(我們稱它為“ A”),該方法返回一個類字段,並且我想從另一個類(“ B”)進行訪問。 重要提示:這兩個類都是abstract
。 這些類在同一package
(所有A
和B
成員都package private
的package private
)。 Main
類沒有包(或者更好的是默認包)。
[之前:扭曲和無用的描述]
我需要從B
類訪問A
的get()
方法。
嘗試過:
1)非靜態呼叫Aobj.get()
從起始main
-位於根對象,但它似乎要的靜態調用(怪異,沒有成員是static
);
2)嘗試靜態訪問它,但我得到了Cannot make a static reference to the non-static field
錯誤(當然)。
...所以我被困住了,但仍然遇到訪問語法錯誤,兩種方法都嘗試。 有什么建議嗎?
編輯:
所以我結束了。 現在,我將嘗試解釋我的錯誤。
基本上 ,問題是我想從包中的類訪問位於Main
類(默認包)中的對象。 所以我遇到了可見性問題。
在其他情況下,我將解決導入該類的問題,但是我發現您無法導入位於默認包中的類 ,因此我創建了一個main
包並在B
類中導入了Main
類。
我一直犯的最嚴重錯誤是認為我必須訪問 main.main(String[])... etc ...Aobj
從 main
本身開始 ,這確實是一個非常糟糕的想法 (仍然無法弄清楚如何我認為)。
實際上,就像斯蒂芬·C指出的那樣:
無論包的情況如何,以及通過其他類的路徑如何,都是如此。
最后,是代碼示例……老實說,現在的代碼與我編寫此問題的時代確實有所不同,並且說實話,由於我不記得我試圖嘗試的所有錯誤邏輯,因此我無法重現錯誤條件實現。 (我的錯。)這次我只想對自己做正確的解釋。
感謝大家的幫助。
如果B的get()
方法不是static
的, B
調用該方法,則需要B
的實例。 例如
B b = ....
b.get();
不管包的情況如何 ,以及您通過其他類的路徑如何 ,等等,都是如此。 (盡管我不確定我是否完全理解您對所有這些的“散文”描述...)
僅從您描述的內容(沒有代碼),您就需要訪問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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.