您在B
类需要的A
一个实例,并且该实例调用f2
。举例来说,你可以实例化一个f3
体内:
另一种方式将是f3
收到的A
一个实例:
public class B {
public void f3(A a) {
a.f2();
}
}
而另一种方式,你可以有B
实例化之一:
public class B {
private final A a;
public B() { this.a = new A(); }
public void f3() {
this.a.f2();
}
}
最后,B
可以接收一个在它的构造函数:
public class B {
private final A a;
public B(A a) { this.a = a; }
public void f3() {
this.a.f2();
}
}
的一点是,如果你想在一类你必须有一个类的实例,在你的手调用一个实例方法。
最后,我注意到你有A.f1
调用B.f3
并从那里你想调用A.f2
。所以,看起来你最好的选择是上面的第二个选项。那就是:
public class A {
private final B = new B();
public void f1() { this.b.f3(this); }
public void f2() { /* do something */ }
}
public class B {
public void f3(A a) { a.f2(); }
}
这里的关键是,我们传递的A
一个实例B.f3
。我们实现的方式是通过传递this
引用,该引用是对当前正在执行的实例的引用。在A.f1
中,这将是当前正在执行的A
的实例。
嗯,是的,只要你有A'的'一个实例上调用它... –
我假设你要调用调用它的实例,而不是只任何'A'实例? –
@Peter Lawrey是真的。这是如此 – user1448906