0

对不起,非常模糊/混乱,我真的不知道如何命名这个问题。如果有人有更好的,请随时编辑它。关于我的问题,

public class Foo()
{
    String name;
    public Foo()
    {
        Bar temp = new Bar();
    }
}    

public class Bar()
{
    public Bar()
    {
        setFooName("newName");
    }

    public void setFooName(String name)
    {   
        // Is it possible call a method in Foo?
    }
}    


public class test {
    static public void main(String[] args) 
    {
        Foo foobar = new Foo();
    }
}    

我还是 java 新手,所以我不确定这是否可能,但是使用 C++,我通常会在“Boo”类中有一个“Foo”的局部变量,然后将对该对象的引用传递给Bar 的构造函数,然后将其分配给 Bar 中的局部变量。

由于 java 没有引用,我被困在这件事上。我想这样做的原因是我的示例是我需要在类中创建一个 GUI 对象,然后将来自 GUI 对象的信息发送回创建它的类。

我希望这一切都有意义,如果没有,对不起。

4

2 回答 2

3

我认为您正在关注语义学。

下面的示例传递FooBarviaBar的构造函数的引用的副本。这现在允许Bar访问 的实例的属性Foo。它不允许你做的是改变两者之间的引用(即分配一个新的参考参考Foo将不会改变以前的参考)

public class Foo()
{
    String name;
    public Foo()
    {
        Bar temp = new Bar(this);
    }
}    

public class Bar()
{
    private Foo foo;
    public Bar(Foo foo)
    {
        this.foo = foo;
        setFooName("newName");
    }

    public void setFooName(String name)
    {   
        // Is it possible call a method in Foo?
    }
}    


public class test {
    static public void main(String[] args) 
    {
        Foo foobar = new Foo();
    }
}  

Bar然后可以调用任何Foo提供的修饰符,它会Foo为每个引用该实例的人更改这些单独的属性...

我希望这接近你的要求:P

于 2013-04-19T00:36:06.633 回答
1

实际上你可以在 Java 中做到这一点。Java 有引用,但没有指针。令人困惑的是,对于 C++ 爱好者来说,这些引用可能为空。

这意味着您当然可以执行以下操作:

public class Bar {
    private Foo foo;
    public Bar(Foo foo) {
        this.foo = foo;
    }
    public setFooName(String name) {
        foo.setName(name);
    }
}
public class Foo {
    private String name;
    public Foo() {
        Bar temp = new Bar(this);
        temp.setFooName("fooname");
    }
}

但我不确定,在这种情况下,你为什么不直接写:

public class Foo {
    private String name;
    public Foo() {
        this.name = "fooname";
    }
}
于 2013-04-19T00:41:51.610 回答