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

How to access non-static class fields in a package from the (default package)?

所以我有这个 class(我们称它为 "A")和这个 get() 方法,其中 returns 一个 class 字段,我想要从另一个 class ("B") 访问。 重要:两个 class 都是 abstract 这些 class 都在同一个 packagepackage private AB 成员)。 Main class 没有包(或者更好,默认包)。

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

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

尝试过:

1) 非静态调用Aobj.get() 从位于main 的根对象开始,但似乎想要静态调用(奇怪,成员的none 是static);

2) 试图静态访问它,但我得到了 Cannot make a static reference to the non-static field 错误(当然)。

...所以我被卡住了,仍然遇到访问语法错误,我尝试了两种方法。有什么建议吗?

编辑:

这样我就告一段落了。我现在将尝试解释我的错误。

基本上,问题是我想从 class 访问位于 Main class(默认包)中的对象在一个包内。所以我遇到了可见性问题。

在其他情况下,我会解决导入 class,但我发现 you cannot import a class located in the default package,所以我创建了一个 main 包并导入 Main class 在 B class.

我一直犯的最严重的错误是认为我必须访问 main.main(String[])... etc ...Aobj main 本身,这是一个非常非常糟糕的想法(仍然无法弄清楚我是怎么想的)

事实上,就像 Stephen C 指出的那样:

The is true irrespective of the situation with packages, and irrespective of the path you take through other classes.

最后,代码示例...老实说,现在的代码与我写这个问题的时候真的不一样了,老实说,我无法重现错误的情况,因为我不记得所有的错误我试图实现的逻辑。 (我的错。)我只希望这次能好好解释一下自己。

感谢大家的帮助。

如果B的get()方法不是static那么你需要一个B的实例来调用这个方法;例如

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

包的情况 无关 是真实的,并且 无关 你通过其他 类 的路径,等等。 (虽然我不确定我是否完全理解你对所有这些的描述 "prose" ...)

根据您的描述(没有代码),您需要访问 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
    }

}