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

Java子类重写父类方法新增throws声明为何部分场景报编译错误

Java方法重写异常规则差异说明

这两段代码的运行差异是Java方法重写的异常声明规则导致的,核心规则如下:

  • Java异常分为两类:受检异常(Checked Exception) 和 非受检异常(Unchecked Exception,即RuntimeException及其子类)
  • 子类重写父类方法时,仅允许声明父类方法已声明的受检异常、或父类声明受检异常的子类,不能新增范围更大的、或父类未声明的受检异常;非受检异常不受该规则限制。

第一段代码编译报错的原因

父类Parent的msg()方法没有声明任何受检异常,子类TestExceptionChild重写msg()时声明抛出的IOException属于受检异常,违反了重写的异常限制规则。
另外代码中使用父类引用Parent p = new TestExceptionChild()调用msg()时,编译器会按照父类的msg()方法签名校验,父类方法无需处理受检异常,但子类实际实现需要抛出受检异常,逻辑上存在矛盾,因此直接触发编译错误。

第二段代码正常运行的原因

子类TestExceptionChild1重写msg()时声明抛出的ArithmeticException属于RuntimeException的子类,是非受检异常,不受重写异常规则的限制,因此编译、运行都可以正常执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:30:04