异常在子父类中的覆盖体现

1、子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类;

2、如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。

3、如果父类或者接口的方法没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常,如果子类方法有异常,就必须进行try处理,绝对不能抛出。

### 方法重载与方法覆盖的区别和用法 #### 方法重载(Overloading) 方法重载是指在同一个类中定义多个同名方法,但这些方法的参数列表必须不同。参数列表的不同可以体现在参数的数量、类型或顺序上。方法重载是编译时多态的一种体现。 - **参数数量不同**:例如,一个方法接受一个参数,另一个方法接受两个参数。 - **参数类型不同**:例如,一个方法接受 `int` 类型参数,另一个方法接受 `String` 类型参数。 - **参数顺序不同**:例如,一个方法接受 `(int, String)` 参数,另一个方法接受 `(String, int)` 参数。 以下是方法重载的示例: ```java class Calculator { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } } ``` 上述代码展示了两个 `add` 方法,它们的参数类型不同,因此构成了方法重载[^2]。 #### 方法覆盖(Overriding) 方法覆盖是指类重新定义从父类继承的方法。为了实现覆盖中的方法必须满足以下条件: 1. 方法名必须相同。 2. 参数列表必须完全一致。 3. 返回类型必须相同或为协变返回类型(即返回类型的类型)。 4. 中的访问权限不能低于父类中的访问权限。 5. 抛出的异常类型不能超出父类方法抛出的异常范围。 以下是方法覆盖的示例: ```java class Animal { public void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { @Override public void sound() { System.out.println("Dog barks"); } } ``` 在上述代码中,`Dog` 类覆盖了 `Animal` 类中的 `sound` 方法[^3]。 #### 方法重载与方法覆盖的主要区别 | 特性 | 方法重载(Overloading) | 方法覆盖(Overriding) | |---------------------|----------------------------------------------------|-----------------------------------------------| | **发生阶段** | 编译时 | 运行时 | | **参数列表** | 必须不同 | 必须相同 | | **返回类型** | 可以不同,但通常建议不同 | 必须相同或为协变返回类型 | | **访问修饰符** | 无限制 | 类的访问权限不能低于父类 | | **抛出异常** | 无限制 | 类抛出的异常不能超出父类 | | **是否涉及继承** | 不涉及 | 涉及 | #### 示例对比 ##### 方法重载示例 ```java class Example { public void display(int a) { System.out.println("Integer: " + a); } public void display(String a) { System.out.println("String: " + a); } } public class Main { public static void main(String[] args) { Example e = new Example(); e.display(10); // 输出 Integer: 10 e.display("Hello"); // 输出 String: Hello } } ``` ##### 方法覆盖示例 ```java class Parent { public void show() { System.out.println("Parent method"); } } class Child extends Parent { @Override public void show() { System.out.println("Child method"); } } public class Main { public static void main(String[] args) { Parent p = new Child(); p.show(); // 输出 Child method } } ``` #### 总结 方法重载和方法覆盖都是Java多态性的体现,但它们的作用和使用场景不同。方法重载主要用于增加方法的功能多样性,而方法覆盖则用于修改或扩展父类方法的行为[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值