强制调用基类方法

Buu*_*yen 2 java polymorphism inheritance

运行时的以下代码显然打印出"B1/A2/B2".现在,是否有可能打印"A1/A2/B2"(即A#method2()应该在A上调用method1(),而不是在B上调用?)

注意:我没有这样的需要获得传递多态性,这个问题仅仅是出于好奇.

class A {
    public void method1() {
        System.out.println("A1");
    }

    public void method2() {
        method1();
        System.out.println("A2");
    }
}

class B extends A {
    @Override public void method2() {
        super.method2();
        System.out.println("B2");

    }

    @Override public void method1() {
        System.out.println("B1");
    }
}

public class Tmp {
    public static void main(String args[]) {
        B b = new B();
        b.method2();
    }
}
Run Code Online (Sandbox Code Playgroud)

har*_*rto 5

我不相信; 如果你method1()在一个子类中重写,那就不行了.如果你真的需要这种行为,你必须声明A.method1()final,而你无法定义它B.

这样做对我来说没有意义 - 如果你认为你需要,你应该重新考虑你的设计!