子类重新定义的方法,不能比父类的方法传递更多的异常。举例说明
时间: 2024-09-23 20:05:32 浏览: 40
在面向对象编程中,如果子类重写了父类的方法,按照Java的规定,子类的方法不能抛出比父类方法更广泛的异常。这意味着,如果父类的方法声明了某种类型的异常,例如`void parentMethod() throws IOException`,那么子类覆盖这个方法时,它只能抛出`IOException`或其子类,而不能抛出其他更一般的异常,如`Exception`。
举个例子:
```java
class Parent {
public void readData() throws FileNotFoundException {
// 父类方法处理文件读取,可能抛出FileNotFoundException
}
}
class Child extends Parent {
@Override
public void readData() {
try {
// 子类尝试读取数据,可能会引发其他I/O错误,但不能直接抛出FileNotFoundException
// 如果发生,需要捕获并转化为Parent中声明的异常类型或其子类
FileInputStream fis = new FileInputStream("file.txt");
} catch (IOException e) {
throw new FileNotFoundException(); // 可以将更具体的异常转换为父类的异常
}
}
}
```
在这个例子中,`Child`类重写的`readData()`方法不能直接抛出`IOException`,因为它更广泛。如果发生了这样的错误,子类需要适当地处理并转换成`FileNotFoundException`,然后通过`throw new FileNotFoundException();`将其向上抛出,以保持子类对父类方法签名的兼容性。
阅读全文