2012-07-18 82 views
0

這可能看起來像一個愚蠢的問題,但對象是否可以從實例化它的對象中調用方法?來自子類的父類中的調用方法

具體來說,如果我有一個擴展JFrame的類A來提供一個GUI類和類B和C,它們是具有不同組件的JPanel類型,那麼哪個A類對象在B和C之間變化,以向用戶顯示不同的內容。 B類對象是否可以調用類A的方法而不在B中創建另一個類A的對象,而是調用其中有B的上A對象?

+0

您可以在實例化時設置A到B. – JMelnik 2012-07-18 10:52:57

+0

是否像1. A有一個B的對象... 2. A有一個方法'methodA' 3.你想從B調用'methodA'? – Mohayemin 2012-07-18 10:56:27

+0

是的。例如,一個對象,它是帶有菜單的整體空白JPanel容器,它依次調用帶有組件的JPanel的B對象,以及用戶與組件(例如按鈕)交互時的對象。那B按鈕動作事件調用A的方法,根據按鈕更改顯示,如果這是有道理的.. – Ben 2012-07-18 11:42:46

回答

1

我看到的最簡單的方法是將A傳遞給B和C,可以通過參數或B/C的擴展來保存A實例並具有setter。

0

您可以嘗試將引用放置在創建B或/和C對象的A對象中,例如使用setter或將它們作爲構造器參數傳遞。

class A extends JFrame{ 
    void someMethod(){System.out.println("methods body");} 
    public static void main(String[] args) { 
     A a=new A(); 
     B b=new B(); 
     b.setCreator(a); 
     b.test(); 
    } 

} 
class B extends JPanel{ 
    private A creator; 
    public void setCreator(A creator) { 
     this.creator = creator; 
    } 

    void test(){ 
     creator.someMethod(); 
    } 
} 
+0

謝謝你們,這真的給了我一些工作。我會給它一個旋轉,看看它如何。乾杯 – Ben 2012-07-18 11:45:09

0

最好的解決方案是讓實例化的代碼將自己的引用傳遞給它正在創建/創建的對象。

這在理論上是可能的目的是找出哪些創造了它(通過創建Exception並查看其堆棧跟蹤)......但有正在執行的應用程序中沒有辦法找出創建實例

1

看起來像你需要這樣的東西。

class A { 
     private B b; 
     public void method() { 
      b = new B(this); 
     } 
    } 

    class B { 
     private A a; 
     public B(A a) { 
      this.a = a; 
     } 
     void callAMethod() { 
      a.method(); 
     } 
    } 
}