2011-04-08 76 views
0

在Java中,我有这样的事情的Java:调用方法

public class A { 
    private String title; 
    public A() { 
    // do something 
    } 

    public void run() { 
     B b = new B(); 
     b.run(); 
    } 

    public void changeTitle(String newTitle) { 
     this.title = newTitle; 
    } 
} 


public class B { 
    public B() { 
    // do something 
    } 
    public void run() { 

    } 
} 

我的问题是在方法run()的B的,是有可能调用方法changeTitle()是在改变的标题A实例化B的实例?

谢谢

+0

对象与实例化对象之间没有隐式链接。正如大众在下面所说的,你需要明确地表达这种联系。 – 2011-04-08 16:52:46

+0

为什么不只是执行它?这是我猜测的最快方式。 – Bhushan 2011-04-08 16:54:53

回答

1

B只能调用A上的方法,如果它包含对A实例的引用。您可以将A的实例传递给B来实现此目的。

public void run() { 
    B b = new B(this); 
    b.run(); 
} 

public class B { 
    private A a; 
    public B(A a) { 
     this.a = a; 
     a.changeTitle("Ha!"); 
    } 
} 
0

当然。在B的构造函数中传递A的实例。

0

这只有在您调用B的run()方法时通过this作为参数才有可能。

1

如果B接受在其构造A型,和当你说新的B,在“这个”类似传给

public void run() { 
    B b = new B(this); 
    b.run(); 
} 

现在你有一个对象的副本与您的合作。

+0

它真的是副本(即新实例)还是对'A'原始实例的引用? – Femaref 2011-04-08 16:53:21

+1

@Fermaref其参考。 – subsub 2011-04-08 17:09:41

+0

感谢subsub,我是迄今为止不是java的专家,你可以告诉:D。 – 2011-04-08 17:17:48

0

除非你安排的B情况下,知道自己应该做什么实例A,要(例如,通过传递到构造函数B并记住它)。

如果你正在做类似的事情,那么你应该考虑,例如,如果一个B的实例是由A的实例以外的东西创建的,你想要发生什么。

0

没有。这样的B实例不知道是谁创建的。然而,随着乙作为

public class B { 
    private A creator; 

    public B(A creator) { 
     this.creator = creator; 
     // do something 
    ... 
    } 

A.run()创建new B(this),B可以调用在其run()方法creator.changeTitle("whatever")

0

B是A的非静态内部类,你调用A的方法(并访问它的fieldes)。