【问题标题】:is super must called in order to use superclass' method for Java必须调用 super 才能使用 Java 的超类方法
【发布时间】:2015-01-11 18:00:28
【问题描述】:
class StackWithMin extends Stack<NodeWithMin>{

    public void push(int value){
        int newMin = Math.min(value, min());
        super.push(new NodeWithMin(value, newMin));
    }

    public int min(){
        if (this.isEmpty()){
            return Integer.MAX_VALUE;
        }else{
            return peek().min;
        }
    }
}

class NodeWithMin{
    public int value;
    public int min;
    public NodeWithMin(int v, int min){
        value=v;
        this.min=min;
    }
}

当我测试这个类时,似乎没有或添加了 super。在 push/peek(第 5 行和第 12 行)产生相同的结果之前。那么,超级有必要吗?

这个解决方案的作者有super.push(),但没有前缀peek(),她这样做有什么原因吗?

【问题讨论】:

  • 不清楚你的意思。但是如果你想调用超类方法而不是子类覆盖,则需要前缀super.

标签: java super


【解决方案1】:

super 仅在StackWithMin 覆盖push 方法并且您将从Stack 调用push 方法时才需要

【讨论】:

  • @Lydia 那你就不需要super了。
  • ...在这种情况下,没有必要,因为StackWithMin 没有push(NodeWithMin) 覆盖,所以没有歧义。 StackWithMinpush(int),这是一个重载,但不是覆盖。
  • @Lydia 所以,你有你的答案:不,不需要超级。如果您覆盖了 push() 方法,但仍想调用在超类中定义的原始方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
相关资源
最近更新 更多