Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对象如何引用创建它的类_Java - Fatal编程技术网

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

Java对象如何引用创建它的类,java,Java,这个信息可能存在于某个地方,但我不知道用什么关键字来查找它 因此,如果我的程序的主方法foo创建了另一个类的对象bar,那么bar如何引用foo中的方法呢 public class Foo{ Bar baz = new Bar(); public Foo(){} public int getNum(){ return 3; } } public class Bar{ public Bar(){ /*Somehow

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

因此,如果我的程序的主方法
foo
创建了另一个类的对象
bar
,那么
bar
如何引用
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
的对象),我不知道如何引用它。

bar
类中创建
foo
字段,然后为
bar
创建一个使用
foo
参数的构造函数。使用构造函数设置字段的实例。现在,您只需将关键字传递到构造函数中:

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;
    }
}
private final Foo foo;
public Bar(Foo foo) {
    this.foo = foo;
}
...
public class Foo {
    Bar baz = new Bar(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;
    }
}
private final Foo foo;
public Bar(Foo foo) {
    this.foo = foo;
}
...
public class Foo {
    Bar baz = new Bar(this);
    ...
}

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

Foo
实例传递到
Bar
newbar(this)
和change
Bar
constructor
public Bar(Foo-Foo)
。此外,您所做的操作可能会导致循环依赖,如果
getNum
依赖于在
Foo
s构造函数中初始化的某个实例变量,则从
Bar
s构造函数调用它时将失败。谢谢,这正是我需要的!快速、简短和简单请参阅我的第二条评论。我个人不建议使用那种依赖关系。当对象的实例尚未完全初始化时,将对象的实例传递给另一个对象是错误的。