在Java中调用一个非自我类的超类

时间:2014-09-23 13:03:13

标签: java super

我想通过另一个类中的子类调用超类的方法。

例如: A类及其子类CA,CA覆盖A的方法f()

class A{
    f();
}

class CA extends A{
   @Override
   f();
}

B类中的CA实例:

class B{
    CA mCA = new CA();
}

有没有办法在B类中调用CA超类(A)的方法f()?像

mCA.super.f();   (I know its wrong)

...

感谢您的帮助:)

2 个答案:

答案 0 :(得分:4)

根本没有。

你可以调用你所拥有的类的对象的方法。

BTW为什么要调用超类的方法?

如果您需要这样做,那么您的班级设计就会出现问题。 CA应该创建自己的方法,您可以直接在课程f()中调用CA,而A会调用类{{1}}的方法。

或者重写的方法应该与原始实现兼容。在这种情况下,不需要调用超类的方法。

答案 1 :(得分:1)

您将使用 reflection 打破封装。像这样......

PS:这不是一个好习惯。这段代码只是为了表明这可以做到。

class A {
    public static void f() {
        System.out.println("A");
    }
}

class CA extends A {

    public static void f() {
        System.out.println("CA");
    }
}

class B {
    public static void main(String[] args) throws IllegalArgumentException,
            SecurityException, IllegalAccessException,
            InvocationTargetException, NoSuchMethodException { // got genuinely scared here..
        CA mCA = new CA();
        mCA.getClass().getSuperclass().getMethod("f", null).invoke(mCA, null);

    }

}

O / P:

A