簡體   English   中英

從子類調用父類中的方法

[英]Call method in parent class from child class

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

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

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

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

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

您可以嘗試在其中創建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();
    }
}

還要考慮在Swing框架中存在不同的方法來獲取組件的層次結構,如getParent()getRoot()

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

從理論上講,對象可以找出創建它的 (通過創建Exception並查看其堆棧跟蹤)......但是在執行的應用程序中找不到創建實例是沒有辦法的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM