繁体   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