在Java中,当你在子类中重写一个方法时,你可以选择是否抛出异常。但是,有一些规则需要遵循:
如果父类方法没有声明任何异常(即没有抛出任何受检异常),那么子类重写的方法也不能抛出任何受检异常。
如果父类方法声明了受检异常,那么子类重写的方法可以抛出相同的异常、该异常的子类异常,或者不抛出任何异常。但是,子类重写的方法不能抛出新的受检异常,也不能抛出父类方法没有声明的受检异常。
如果父类方法抛出了一个非受检异常(例如RuntimeException或其子类),那么子类重写的方法可以选择抛出相同的非受检异常、该异常的子类异常,或者不抛出任何异常。但是,子类重写的方法不能抛出新的非受检异常,也不能抛出父类方法没有声明的非受检异常。
以下是一些示例:
// 父类方法没有声明任何异常
class Parent {
void doSomething() {
// ...
}
}
// 子类重写方法,不能抛出受检异常
class Child extends Parent {
@Override
void doSomething() {
// ...
}
}
// 父类方法声明了一个受检异常
class Parent {
void doSomething() throws IOException {
// ...
}
}
// 子类重写方法,可以抛出相同的异常、该异常的子类异常,或者不抛出任何异常
class Child extends Parent {
@Override
void doSomething() throws FileNotFoundException {
// ...
}
}
// 父类方法抛出了一个非受检异常
class Parent {
void doSomething() {
throw new RuntimeException("Error");
}
}
// 子类重写方法,可以选择抛出相同的非受检异常、该异常的子类异常,或者不抛出任何异常
class Child extends Parent {
@Override
void doSomething() {
throw new RuntimeException("Error");
}
}
总之,在重写方法时,要注意遵循这些规则,以确保代码的正确性和可读性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。