Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

有父类如下:

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
247 views
Welcome To Ask or Share your Answers For Others

1 Answer

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...