在java中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常不应该比父类的大。只能是小等,或者可以没有。原因如下。
假如我们自定意义一个异常:
public class MyException extends Exception {
public MyException(String message) {
}
public MyException() {
}
}
那么我们有一个父类它将有一个方法,将声明抛出这个异常。我们把它做成抽象的(无所谓)
public abstract class ParentException {
public abstract void test() throws MyException;
}
那么将有一个类使用到上面这个类
public class ExceptionTest {
private ParentException exception;
public ExceptionTest(ParentException exception){
this.exception=exception;
}
public void app(){
try {
exception.test();
} catch (MyException e) {
e.printStackTrace();
}
}
}
对于以上的try~catch 我们就直接捕获MyException异常。这是正确的,它在编译的时候是没有问题的。
假如,有一个ParentException的有一个子类
public class ChildException extends ParentException{
public void test() throws Exception{
}
}
他的方法可以声明抛出比父类大的异常,假如它是正确的。
那么问题来了。当我们执行ExceptionTest类的时候,我们以这个子类做为对象传进去。
exception.test();这个地方将在运行的时候实际调用的是ChildException这个子类的test()方法,而它的声明抛出却是比父类大的异常,这就使得在ExceptionTest类中,捕获异常处出现了毛病,因为它无法捕获Exception异常。
综上所诉,子类重写父类的方法时候不能声明抛出比父类大的异常
分享到:
相关推荐
1. 代码重用:继承允许子类继承父类的属性和方法,从而减少代码的冗余和重复。 2. 继承关系建模:继承可以建模现实世界中的继承关系,如车辆的继承关系,即 Car 。 3. 提高代码的灵活性:继承允许子类继承父类的方法...
继承是特殊的is-a关系,即子类继承父类,说明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。子类和父类之间存在着继承关系,子类继承父类的所有属性和方法。 二、继承的语法格式 Java继承的关键字...
- 子类不能抛出比父类更多的异常。 4. 重载(Overload) 重载是指在同一个类中,方法名相同但参数列表不同的方法。参数列表包括参数的数量、类型和顺序。与方法重写不同,重载与返回值类型和访问权限无关。 5. `...
Java中的继承是面向对象编程的重要特性,它允许子类继承父类的属性和方法,从而实现代码的复用和类的扩展。在本课程中,我们深入探讨了继承的几个关键概念。 首先,继承的概述指出,当多个类具有相似的属性和行为时...
在使用继承时,我们需要注意,子类不能覆盖父类中私有方法,即使与父类中私有方法一模一样,也只是在子类中定义了一个方法而已,并不是覆盖。子类覆盖父类方法的权限必须大于等于父类权限。 此外,我们还学习了获取...
- **抛出异常**:重写方法抛出的异常类型不能大于被重写方法的异常类型。 - **修饰符**:子类方法不能是 private 或 static,否则不属于重写,而是隐藏。 3. **@Override 注解**: 使用 `@Override` 注解可以...
当子类重写父类的方法时,子类方法的访问权限必须至少等于或大于父类中对应方法的访问权限。在子类中调用父类的方法可以用`super.fun()`。 2. **继承中属性的覆盖**: 如果子类和父类有同名的属性,子类直接访问...
Java方法覆盖重写实现原理解析是Java编程语言中的一种重要机制,它允许子类继承父类的方法,并对父类方法进行修改或扩展,以满足特定的需求。本文将深入分析Java方法覆盖重写实现原理,介绍相关的注意事项和实践经验...
继承是指子类继承父类的属性和方法,而多态性是指程序可以根据不同的情况执行不同的操作。方法重写和方法重载都是多态性的体现,它们使得程序更灵活、更可维护。 JAVA 是一种流行的面向对象程序设计语言,它的学习...
继承的使用 ...重新定义toString()方法,能打印该学生的基本信息,该方法中试对private类型属性姓名、protected类型变量性别、默认访问类型变量年龄直接访问,理解子类对父类不同类型的属性的访问权限;
5. 错误:方法重写时,子类抛出的异常类型不能大于父类抛出的异常类型,只能等于或小于。 **选择题**: 1. D、编译失败:div方法尝试执行除法操作,可能会抛出ArithmeticException,没有捕获异常会导致编译失败。 2...
- 子类继承父类后,不能直接调用父类的私有方法,选项B错误。 - 封装是面向对象编程的重要原则,用于隐藏内部实现细节,提高程序安全性,选项C错误。 - 封装的主要作用在于对外隐藏内部实现,增强程序的可维护性...
而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法, 即在子类中重写该方法——相同参数,不同实现(动态多态性) 复制代码 public class Base { void test...
- 即使子类继承了父类,也不能直接访问父类中被封装的方法,除非父类提供了公有的访问接口。 - 封装的意义重大,因为它降低了模块间的耦合度,增强了软件的灵活性和可扩展性。 3. **继承**: - Java不支持多重...
子类继承父类后,可以拥有父类的所有公共属性和方法,但不能访问私有属性和方法。在某些情况下,子类还可以通过覆盖(Override)父类的方法来实现特定的功能。 【递归】递归是一种算法或编程技术,它解决问题的方式...
重写时需注意,子类方法的访问权限至少要等于或大于父类方法的访问权限,且方法签名必须完全一致(包括返回类型、方法名和参数列表)。 3. **this关键字**: `this`关键字在Java中代表当前对象的引用。在子类中,...
4. **继承性与成员**:子类可以拥有父类的成员,并可以添加自己的成员,但并非说子类成员一定大于等于父类,因为子类可以覆盖或隐藏父类成员。 5. **抽象方法与抽象类**:抽象方法必须存在于抽象类中,但抽象类可以...
2. **属性和方法共享**:子类继承了父类的属性和方法(不包括构造方法),同时也可以拥有自己的方法。 3. **构造方法调用**:子类构造方法要负责调用适当的父类构造方法,不论是显式还是隐式的方式。 4. **字段初始...
- 继承允许子类继承父类的属性和方法,从而实现代码复用和扩展。 - 多态性使得子类对象可以被视为父类对象,允许在父类引用下调用子类特有的方法。 2. **构造器**: - 构造器用于初始化新创建的对象,它的名字与...
当子类继承父类时,`super`允许我们在子类中调用父类的构造函数、字段或方法。`super()`通常用在子类构造函数的首行,用来调用父类的无参构造函数。如果有参数,我们可以传递相应的值,如`super(param)`。`super`的...