从子类调用父类中的方法

时间:2012-07-18 10:50:52

标签: java swing user-interface parent-child

这看起来像是一个愚蠢的问题,但是对象是否可以从实例化它的对象中调用方法?

具体来说,如果我有一个扩展JFrame的类A来提供一个GUI和类B和C,它们是具有各种组件的JPanel类型,那么A类对象在B和C之间变化以向用户显示不同的内容。 B类的对象是否可以调用类A的方法而不在B中创建另一个类A的对象但是调用其中包含B的上层A对象?

5 个答案:

答案 0 :(得分:1)

我看到的最简单的方法是将A传递到B和C,或者通过参数或B / C的扩展来保存A实例并且有一个setter。

答案 1 :(得分: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();
        }
    }
}

答案 2 :(得分: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();
    }
}

答案 3 :(得分:0)

还要考虑在Swing框架中存在不同的方法来获取getParent()getRoot()等组件的层次结构。

答案 4 :(得分:0)

最好的解决方案是让实例化的代码将自己的引用传递给它正在创建/创建的对象。

理论上,对象可以找出哪个创建它(通过创建Exception并查看其堆栈跟踪)...但是在执行的应用程序中没有办法找出创建实例