所以我有这个类(我们称之为"A"),它带有这个get()
方法,它返回一个类字段,我想从另一个类("B")访问它。重要提示:这两个类都是abstract
。这些类位于同一package
(所有A
和B
成员package private
)。Main
类没有包(或者更好的是默认包)。
[之前:扭曲和无用的描述]
我需要从B
类访问A
的get()
方法。
尝试过:
1)非静态调用Aobj.get()
从main
定位的根对象开始,但它似乎想要静态调用(奇怪,没有一个成员static
);
2)尝试静态访问它,我得到了Cannot make a static reference to the non-static field
错误(当然)。
。所以我被卡住了,仍然得到访问语法错误,我尝试两种方式。有什么建议吗?
编辑:
所以我走到了尽头。我现在将尝试解释我的错误。
基本上,问题是我想从包中的类访问位于Main
类(默认包)中的对象。所以我遇到了一个能见度问题。
在其他情况下,我会解决导入类的问题,但我发现您无法导入位于默认包中的类,因此我创建了一个main
包并将Main
类导入B
类。
我一直犯的最严重的错误是认为我必须从main
本身开始访问main.main(String[])... etc ...Aobj
,这是一个非常非常糟糕的想法(仍然无法弄清楚我是怎么想的)。
事实上,正如斯蒂芬C指出的:
无论包的情况如何,也无论您通过其他类采用的路径如何,都是如此。
最后,代码示例...老实说,现在的代码与我写这个问题的日子真的不同,老实说,我无法重现错误的条件,因为我不记得我试图实现的所有错误逻辑。(我的错。我只希望这次能好好解释一下自己。
感谢大家尽力帮助。
如果 B 的 get()
方法不static
那么如果你想调用该方法,你需要一个 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
}
}