以下代码运行时显然会打印出“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();
}
}
最佳答案
我不这么认为;如果您要在子类中重写 method1()
,则不会。如果您确实需要这种行为,则必须将 A.method1()
声明为 final
,并且无法在 B
中定义它>。
这样做对我来说没有意义 - 如果您认为需要,您应该重新考虑您的设计!
关于java - 强制调用基类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784542/