所以我有这个课程(让我们称之为#34; A"),这个get()
方法返回一个类字段,我想从另一个类访问它(& #34; B&#34)。 重要提示:这两个类都是abstract
。这些类位于同一package
package private
所有A
和B
成员中。 Main
类没有包(或更好,默认包)。
[之前:扭曲和无用的描述]
我需要B
班级来访问A
get()
方法。
试过:
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
中创建了Main
包并导入了B
类类。
我一直犯的最大错误是认为我必须从 main.main(String[])... etc ...Aobj
本身开始 main
>,这是一个非常糟糕的想法(仍然无法弄清楚我的想法)。
事实上,就像斯蒂芬C指出的那样:
无论包裹的情况如何,无论你通过其他课程的路径如何,都是如此。
最后,代码示例......说实话,代码现在与我写这个问题的日子真的不同,说实话,我不能重现错误的条件,因为我不记得所有我试图实现的错误逻辑。 (我的错。)这次我只想说明自己。
感谢大家尝试提供帮助。
答案 0 :(得分:2)
如果B&#get()
方法不是static
,那么如果要调用该方法,则需要B
的实例; e.g。
B b = ....
b.get();
对于包的情况是真实的无论,并且与您通过其他类的路径无关等等。 (虽然我不确定我完全理解你的"散文"对所有这些的描述......)
答案 1 :(得分: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
}
}