2012-01-23 49 views
0

我對Java中的對象有點新,我希望能得到一些幫助。我希望我能解釋我的情況。我有一個類,我稱之爲GUI4EX,來處理程序GUI。在這個類中,我也有一個創建GUI4EX的一個實例的主要方法:在對象中調用方法?

GUI4EX frame = new GUI4EX(); 

,也是類CustomHandler的實例,但這不是主要的方法完成了:

CustomHandler customHandler = new CustomHandler(); 

從GUI4EX中的代碼中,我調用了customHandler中的方法,如下所示:CustomHandler.getSomeValue()。如果我想從CustomHandler類的GUI4EX中獲得一個方法,那該怎麼辦?這是可能的,我該怎麼辦?希望我的疑問不是不清楚!謝謝!

回答

1

您必須瞭解面向對象編程的一個重要內容:方法屬於對象。當你知道一個要調用的方法的對象時,你只能調用一個方法。

在你的例子中,CustomHandler必須知道具體的GUI4EX對象來調用它的方法。一種可能性是添加一個參數的構造器:

class CustomHandler { 
    private GUI4EX frame; 

    public CustomHandler(GUI4EX theFrame) { 
    frame = theFrame; 
    } 
} 

然後你就可以訪問該字段frame用於調用GUI方法。

但請注意,您將創建一個循環關係。這意味着兩個類別 - CustomHandlerGUI4EX都相互依賴。這可能會導致問題並導致糟糕的代碼設計。如果可以,請嘗試避免這種依賴關係。


*還有靜態方法,但它們使用較少。

+0

OK!所以這是一個糟糕的編程來達到這樣的方法? –

+0

項目越大,如果使用多個循環關係,代碼越複雜。如果這兩個類是非常相關的,並且在相同的java包中,它可能沒問題。但如果可能的話儘量避免。 – Yogu

1

您需要爲此建立您的班級關係。如果我理解你正確,則:

  • GUI4EX具有CustomHandler的實例作爲類成員
  • 但正在用默認構造函數構造CustomHandler沒有通過GUI4EX參考

雖然它不會是一個非常好的設計,但您可以將GUI4EX的參考傳遞給CustomHandler;無論是在構造函數或setter方法是這樣的:

class CustomHandler { 
    GUI4EX gui; 
    // your rest of class members 
    public void setGui(GUI4EX gui) { 
     this.gui = gui; 
    } 
    // your rest of methods 
} 

然後,在類GUI4EX一些方法中,通過GUI4EX的參考:

customHandler.setGui (this); 
+0

感謝您的回覆! –