有父类如下:
public class SuperClass {
public void outerFunc(){
innerFunc();//SuperClass.this.innerFunc()也没用
}
public void innerFunc(){ //A
System.out.println("super");
}
}
子类如下
public class SubClass extends SuperClass {
@Override
public void innerFunc() { //B
super.outerFunc();
}
public static void main(String[] args) {
new SubClass().outerFunc();
}
}
现在执行main()
函数,会出现内存栈溢出!原因是调用父类的方法outerFunc()
时,该方法内部会调用子类覆写的innerFunc()
方法(也就是B处的方法)造成无限循环。
在不改变方法签名的情况下如何强制父类调用A处的方法而不是B
处?
除非你在
SubClass
的方法中显式调用super().innerFunc()
,其他情况下,子类是不能访问父类被重写方法的