這可能看起來像一個愚蠢的問題,但對象是否可以從實例化它的對象中調用方法?來自子類的父類中的調用方法
具體來說,如果我有一個擴展JFrame的類A來提供一個GUI類和類B和C,它們是具有不同組件的JPanel類型,那麼哪個A類對象在B和C之間變化,以向用戶顯示不同的內容。 B類對象是否可以調用類A的方法而不在B中創建另一個類A的對象,而是調用其中有B的上A對象?
這可能看起來像一個愚蠢的問題,但對象是否可以從實例化它的對象中調用方法?來自子類的父類中的調用方法
具體來說,如果我有一個擴展JFrame的類A來提供一個GUI類和類B和C,它們是具有不同組件的JPanel類型,那麼哪個A類對象在B和C之間變化,以向用戶顯示不同的內容。 B類對象是否可以調用類A的方法而不在B中創建另一個類A的對象,而是調用其中有B的上A對象?
我看到的最簡單的方法是將A傳遞給B和C,可以通過參數或B/C的擴展來保存A實例並具有setter。
您可以嘗試將引用放置在創建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();
}
}
謝謝你們,這真的給了我一些工作。我會給它一個旋轉,看看它如何。乾杯 – Ben 2012-07-18 11:45:09
此外還應考慮到在Swing框架存在diferent方法來獲得組件的像getParent()或getRoot()層次。
最好的解決方案是讓實例化的代碼將自己的引用傳遞給它正在創建/創建的對象。
這在理論上是可能的目的是找出哪些類創造了它(通過創建Exception
並查看其堆棧跟蹤)......但有正在執行的應用程序中沒有辦法找出創建實例 。
看起來像你需要這樣的東西。
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();
}
}
}
您可以在實例化時設置A到B. – JMelnik 2012-07-18 10:52:57
是否像1. A有一個B的對象... 2. A有一個方法'methodA' 3.你想從B調用'methodA'? – Mohayemin 2012-07-18 10:56:27
是的。例如,一個對象,它是帶有菜單的整體空白JPanel容器,它依次調用帶有組件的JPanel的B對象,以及用戶與組件(例如按鈕)交互時的對象。那B按鈕動作事件調用A的方法,根據按鈕更改顯示,如果這是有道理的.. – Ben 2012-07-18 11:42:46