我正在使用Java,我想从类B中调用A类中的方法f2。是否可以这样做?
public class A{
private B b = new B();
public void f1(){
b.f3();
}
public void f2(){
// do something;
}
}
public class B{
public void f3(){
// Call f2 of class A from here.
}
}
答案 0 :(得分:3)
您需要在类A
中使用B
的实例,并在该实例上调用f2
。例如,您可以在f3
:
public class B {
public void f3() {
A a = new A();
a.f2();
}
}
另一种方法是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
的实例。
答案 1 :(得分:1)
你需要一个A类实例才能做到这一点。
public class A{
private B b = new B();
public void f1(){
b.f3(this);
}
public void f2(){
// do smthing;
}
}
public class B{
public void f3(A a){
a.f2(); // Call f2 of class A from here.
}
}
这种类型的代码结构通常比有用的更令人困惑。我建议改为做。
public class A{
private B b = new B();
public void f1(){
WhatAf2Needs w = b.f3();
f2(w);
}
public void f2(WhatAf2Needs w){
// do smthing;
}
}
public class B{
public WhatAf2Needs f3(A a){
return WhatAf2Needs;
}
}
答案 2 :(得分:1)
如果你想调用一个叫你的东西的方法,你必须让调用者使用this
关键字来传递自己。在代码中,它将是:
public class A{
private B b = new B();
public void f1(){
b.f3(this);
}
public void f2(){
// do smthing;
}
}
public class B{
public void f3(A caller){
caller.f2();
}
}
答案 3 :(得分:0)
您必须在类A
中实例化类B
,并按照当前编写的方式对其进行任何方法调用。
答案 4 :(得分:0)
您也可以声明f2
静态,并将其称为A.f2()
。这种类型的东西很大程度上取决于你的类的设计。这里的其他答案也非常有效。
public class A{
private B b = new B();
public void f1(){
b.f3();
}
public static void f2(){
// do smthing;
}
}
public class B{
public void f3(){
A.f2();
}
}