You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承Stack类重写pop()方法报错的正确实现方法

错误原因

两种错误写法的本质是对Java父类方法调用的语法理解有误:

  • this.super()属于非法语法:super是指向当前实例父类部分的关键字,调用父类成员方法的固定语法为super.方法名(),不存在this.super()的写法,这也是报错'java.util.Stack' is not an inner class的直接原因。
  • this.pop()会直接调用当前类中你重写后的pop()方法,逻辑上形成自调用闭环,触发无限递归,最终抛出StackOverflowError。
正确重写方式

需要调用父类Stack原生的pop实现时,直接使用super.pop()即可,修正后的代码如下:

public class MyStack extends Stack<MyItem> {
    private int pops = 0;

    public MyStack() {
    }

    @Override
    public MyItem pop() {
        if (this.isEmpty()) {
            return null;
        }
        pops++;
        return super.pop();
    }

    /**
     * 可选:提供弹出次数的查询方法
     */
    public int getPopCount() {
        return pops;
    }
}

额外提示:java.util.Stack是JDK早期遗留的实现类,继承自Vector,所有操作都带synchronized同步锁,性能较差,官方更推荐在生产环境使用ArrayDeque作为栈结构的实现,通过组合而非继承的方式做自定义扩展。如果只是练习继承重写语法,上述写法完全符合Java语法规范。

内容的提问来源于stack exchange,提问作者InspiredCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:00:50