0

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

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

我需要从B课堂上访问A'sget()方法。

试过:

Aobj.get()1)从 -located 根对象开始的非静态调用main,但它似乎想要静态调用(奇怪,没有一个成员是static);

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

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

编辑 :

所以我走到了尽头。我现在将尝试解释我的错误。

基本上,问题是我想从包中的类访问位于Main类(默认包)中的对象。所以我遇到了能见度问题。

在其他情况下,我会解决导入类的问题,但我发现您无法导入位于默认包中的类,因此我创建了一个main包并Main在类中导入了B类。

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

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

不管包的情况如何,也不管你通过其他类的路径如何,这是真的。

最后,代码示例......老实说,现在的代码与我写这个问题的日子真的不同,老实说我无法重现错误的情况,因为我不记得我试图尝试的所有错误逻辑达到。(我的错。)这次我只想好好解释一下自己。

感谢大家试图提供帮助。

4

2 回答 2

2

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

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

无论包的情况如何,无论您通过其他类等的路径如何,这都是正确的。(虽然我不确定我是否完全理解你对所有这些的“散文”描述......)

于 2016-07-16T03:34:42.263 回答
2

就您所描述的(没有代码)而言,您需要访问b. 有几种方法可以做到这一点。如果有问题的方法可以为每个调用A使用不同的实例,只需向该方法添加一个参数:BB

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实例,请将其设为 type 的字段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
    }

}
于 2016-07-16T03:35:36.580 回答