Java对象如何引用创建它的类

问题描述 投票:3回答:2

这些信息可能存在于某处,但我不知道用什么关键字来查找它

因此,如果我的程序的主要方法foo创建另一个类的对象barbar如何引用foo中的方法。

public class Foo{

    Bar baz = new Bar(); 

    public Foo(){}

    public int getNum(){ 

      return 3; 

   }
}

public class Bar{

    public Bar(){ 

     /*Somehow use getNum*/

    }
}

我可能有Bar扩展foo,或创建一个foo对象。

问题是foo对象已经存在(创建bar的对象),我只是不知道如何引用它。

java
2个回答
3
投票

对象不知道哪些类创建了它们*,所以你需要通过传递对构造函数的引用来告诉它们:

private final Foo foo;
public Bar(Foo foo) {
    this.foo = foo;
}
...
public class Foo {
    Bar baz = new Bar(this);
    ...
}

*内部类的对象隐式地引用它们的外部对象,但它可能不一定是创建它们的类。始终获得对创建类的引用的唯一对象是方法本地和匿名类的对象。


2
投票

Foo类中创建Bar字段,然后为Bar创建一个带有Foo参数的构造函数。使用构造函数设置字段的实例。现在你要做的就是将this关键字传递给构造函数:

public class Foo {  
    Bar baz = new Bar(this);

    public Foo() {
    }

    public int getNum() {
        return 3;
    }
}
public class Bar {
    private Foo parent;

    public Bar(Foo foo) {
        this.parent = foo;
    }
    public Foo getParent() {
        return parent;
    }
}