0

我正在使用 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.
  }

}
4

5 回答 5

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(); }
}

这里的关键是我们传递了一个Ato的实例B.f3。我们实现这一点的方法是传递this引用,它是对当前执行实例的引用。在A.f1中,这将A是当前正在执行的实例。

于 2013-06-19T13:54:52.797 回答
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();
  }
}
于 2013-06-19T13:59:34.430 回答
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;
  }    
}
于 2013-06-19T13:56:53.540 回答
0

鉴于当前编写的方式,您必须A在 class 中实例化类,才能对其进行任何方法调用。B

于 2013-06-19T13:56:01.203 回答
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();
  }

}
于 2013-06-19T13:56:43.663 回答