我正在使用 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.
}
}
我正在使用 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.
}
}
您需要一个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
to的实例B.f3
。我们实现这一点的方法是传递this
引用,它是对当前执行实例的引用。在A.f1
中,这将A
是当前正在执行的实例。
如果你想调用调用你的东西的方法,你必须让调用者使用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();
}
}
您需要一个 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;
}
}
鉴于当前编写的方式,您必须A
在 class 中实例化类,才能对其进行任何方法调用。B
您还可以声明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();
}
}