您在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