Java中覆写父类方法的问题

有父类如下:

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
处?

阅读 2.3k
2 个回答

除非你在 SubClass 的方法中显式调用 super().innerFunc(),其他情况下,子类是不能访问父类被重写方法的

new SuperClass().outerFunc();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题