2013-06-19 50 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(); 
    } 
}