子类中抛出的异常要小于等于父类中抛出的异常

本文详细解析了在Java中子类方法重写时异常处理的原则,即子类中抛出的异常类型必须小于等于父类中抛出的异常类型。通过具体代码示例,阐述了这一原则背后的多态性原理及其实现机制。
**子类中抛出的异常要小于等于父类中抛出的异常
   这是正常的情况,里面运用到多态性的原理,编译看左边,运行看右边  执行的是子类中重写的方法   也就是method  (子类中的方法) 
   如果子类抛出的异常无法被父类无法接收(也就是子类抛出的异常  大于 try  catch 中的异常,那么是无法处理异常,无法接受)
   throws  中抛出的异常  ,是抛给调用该方法的方法,最终还是要被处理类的**
import java.io.FileNotFoundException;
import java.io.IOException;

public class OverriedTest {
    public static void main(String[] args) {
        OverriedTest overriedTest = new OverriedTest();
        overriedTest.display(new SuperClass());
    }

    public void display(SuperClass s){
        try {
            s.method();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class SuperClass{
    public void method()throws IOException{
        System.out.println("hello");
    }
}

class SubClass extends SuperClass{
    public void method()throws FileNotFoundException{
        System.out.println("hello");
    }
}
### Java 子类重写方法的权限规则与异常抛出限制 在面向对象编程中,Java 提供了方法重写的机制以实现多态性。子类通过重写父类的方法,可以定义或修改其行为。然而,这种重写并非完全自由,而是受到一系列规则的约束。 #### 权限规则 子类重写父类方法时,权限修饰符的规则如下: - 子类重写方法的访问权限不能低于父类中被重写方法的访问权限[^3]。例如,如果父类方法是 `protected` 或包访问权限(即没有显式修饰符),子类方法可以是 `public` 或 `protected`,但不能是更严格的访问权限。 - 特殊情况下,子类不能重写父类中声明为 `private` 的方法,因为 `private` 方法对子类不可见[^5]。 #### 异常抛出限制 关于异常抛出的规则,子类重写方法需要遵循以下原则: - 子类重写方法抛出异常类型不能大于父类被重写方法抛出异常类型[^5]。这意味着如果父类方法声明抛出某种特定的受检异常(Checked Exception),子类方法只能抛出异常子类或不抛出任何异常。 - 如果父类方法未声明抛出任何异常,则子类方法也不应声明抛出受检异常。不过,非受检异常(Unchecked Exception,如 `RuntimeException` 及其子类)不受此限制。 #### 示例代码 以下是一个展示权限规则和异常抛出限制的例子: ```java class Parent { protected void method() throws IOException { // 父类方法逻辑 } } class Child extends Parent { @Override public void method() throws FileNotFoundException { // 子类方法抛出异常父类异常子类 // 子类方法逻辑 } } ``` 在这个例子中,子类 `Child` 的 `method` 方法将父类方法的访问权限从 `protected` 提升到了 `public`,并且抛出异常类型 `FileNotFoundException` 是父类异常类型 `IOException` 的子类,符合重写规则。 #### 其他注意事项 - 子类父类中的同名同参数的方法要么都声明为非静态的(考虑重写),或者都声明为静态的(不是重写)。静态方法不属于多态的一部分,因此不会参与重写过程[^5]。 - 返回值类型也需遵循协变返回类型的规则:如果父类方法返回的是某个类型 `A`,子类方法可以返回 `A` 或其子类类型。 ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值