如何从 (默认包) 访问包中的非静态类字段



所以我有这个类(我们称之为"A"),它带有这个get()方法,它返回一个类字段,我想从另一个类("B")访问它。重要提示:这两个类都是abstract这些类位于同一package(所有AB成员package private)。Main类没有包(或者更好的是默认包)。

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

我需要从B类访问Aget()方法。

尝试过:

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
    }
}

相关内容

  • 没有找到相关文章

最新更新