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.4k
2 个回答

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

new SuperClass().outerFunc();
推荐问题