Java中关于子类覆盖父类的抛出异常问题 您所在的位置:网站首页 覆盖方法的访问范围 Java中关于子类覆盖父类的抛出异常问题

Java中关于子类覆盖父类的抛出异常问题

2024-06-20 18:45| 来源: 网络整理| 查看: 265

Java中子类覆盖父类方法抛出异常不能比父类多,这个表述不够准确。准确一点的描述为:子类抛出的异常类型不能比父类抛出的异常类型更宽泛。假设父类抛出异常ParentException,另外有两个子类继承自ParentException分别为ChildException1, ChildException2, 那么 子类可以同时抛出异常ChildException1,ChildException2. 满足“子类抛出的异常类型不能比父类抛出的异常类型更宽泛”,这一条件。 注意:子类也可以选择不进行抛出任何异常,即使他们是父类所定义的异常。

为什么Java设计成这样,下面举个例子进行分析:

package exceptions; class Sick extends Exception{} class FeverSick extends Sick{} class JointSick extends Sick{} class Children extends People{ public void coldAir() throws FeverSick{ } } class Adults extends People{ public void coldAir(){} } class Olds extends People{ public void coldAir() throws JointSick{ } } public class People { public void coldAir() throws Sick{ } } 如上代码,定义了一个父类People类,以及其三个子类Children, Adults, Olds. 假设在父类中有一个冷空气事件,那么它就会抛出一个Sick类型的异常。但是由于三个子类的抵抗疾病的能力不同,那么Adults类由于抵抗力较强,其方法可能不抛出异常。而Children和Adults类型,由于抵抗力较弱,可能抛出Sick类型的不同子类型。但是需要注意的是,子类不能抛出与Sick类完全不相关的异常类型,例如身高Height类型。因为必须把父类作为一个大前提,其子类不能抛出比父类异常更加出格的异常,否则无法进行识别。 大概就是这个意思。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有