2013-06-19 53 views
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. 
    } 

} 
+3

嗯,是的,只要你有A'的'一个实例上调用它... –

+0

我假设你要调用调用它的实例,而不是只任何'A'实例? –

+0

@Peter Lawrey是真的。这是如此 – user1448906

回答

3

您在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的实例。

0

您必须在类B中对类A进行实例化(根据当前编写的方式)对其进行任何方法调用。

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

} 
+0

这是不可能使f2静态 – user1448906

+0

你可以添加到你的问题。正如我所说,根据你的班级和程序设计,有很多方法可以做到这一点。 – Omar

+0

这是真的。但是,猜猜,我已经找到了适合我的解决方案。 – user1448906

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