java super 没有按预期工作

标签 java inheritance overriding

public  class Counter{
    private int value;


    public int getValue(){
        return value;
    }

    public void setValue (int value){
        this.value = value;
    }

    public  void increment() {

        /* */
    }

    public  void decrement() {
        /* */
    }
}


public class LoopingCounter extends Counter{

    private int limit;

    public LoopingCounter(int limit){
        this.limit = limit;
    }

    public void increment(){
        int value = super.getValue();
        if( value == limit){

            System.out.println("Value has reached the limit, cannot increment any further!");
            setValue(0);

        } else{
            value++;
            setValue(value);
        }
    }
    public void decrement(){
        int value = super.getValue();
        if(value == limit){
            System.out.println("Value has reached the limit, cannot decrement any further!");            
        } else{
            value--;
            setValue(value);
        }
    }

    public int getValue() {
        System.out.println("override");
        return 1000;
    }

}

public class CounterTest{
    public static void main(String[] args){

        LoopingCounter lc = new LoopingCounter(100);


        for(int i=0; i<150; i++){
            lc.increment();
            System.out.println(lc.getValue());
        }

    }
}

在这种情况下,LoopingCounter 应该触发 Counter 类中的 getValue 方法。但由于某种原因,当我运行它时,它继续使用自己的 getValue 方法。

请帮助我理解为什么我不能以这种方式调用父方法。

抱歉:

我现在看到了我的错误。我道歉。我没有意识到 lc.getValue() ,并且很困惑为什么 lc.increment 无法正确调用 super.getValue() 。故事的主旨是在发布 SO 之前先保证充足的 sleep 。 -_-”

最佳答案

行为是正确的。如果您想调用 CountergetValue() ,那么您需要在 LoopingCounter 内部的某个位置拥有 super.getValue() getvalue() 方法。 lc.getValue() 将始终调用 LoopingCounter 类中定义的 getValue() 方法,因为 lc 是一个实例LoopingCounter .

关于java super 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16012458/

相关文章:

C# - 关键字用法 virtual+override 与 new

java - 我的 toString() 方法没有覆盖 Calendar toString() 方法

java - Google Guava TreeMultimap - 根据排序顺序检索值?

javascript - 为什么 Object 原型(prototype)方法会覆盖 JavaScript 中的 String 和 Number 原型(prototype)方法?

java - 使用其他 jinternalframe 类将 jinternalframe 类添加到 jdesktoppane

javascript - 如何在typescript中模拟多态?

iphone - Cocos2d-iPhone中继承CCSprite

java - Java 中重写 equals - getClass() 方法

java - HTTP 状态 404 Apache Tomcat 错误 Spring MVC Java?

java - 如果我在 for 循环之后添加球,为什么球不会出现在框架中?