在Java中,当一个子类继承了一个超类(父类),子类可以覆盖(override)或继承超类中的方法。如果超类中的方法抛出了异常,那么子类在覆盖这些方法时需要遵循以下规则:
如果超类方法抛出了受检异常(checked exception),那么子类在覆盖这个方法时,可以选择抛出相同的异常、抛出该异常的子类或者不抛出任何受检异常。但是,子类不能抛出新的受检异常或者更广泛的受检异常。
如果超类方法抛出了运行时异常(runtime exception),那么子类在覆盖这个方法时,可以选择抛出相同的运行时异常、抛出该异常的子类或者不抛出任何运行时异常。子类不受受检异常的限制。
下面是一个简单的例子,演示了如何在子类中处理超类的异常:
// 超类
class SuperClass {
void throwCheckedException() throws IOException {
throw new IOException("Checked exception from SuperClass");
}
void throwRuntimeException() {
throw new RuntimeException("Runtime exception from SuperClass");
}
}
// 子类
class SubClass extends SuperClass {
// 覆盖超类的受检异常方法,可以选择抛出相同的异常、抛出该异常的子类或者不抛出任何受检异常
@Override
void throwCheckedException() throws FileNotFoundException {
throw new FileNotFoundException("Checked exception from SubClass");
}
// 覆盖超类的运行时异常方法,可以选择抛出相同的运行时异常、抛出该异常的子类或者不抛出任何运行时异常
@Override
void throwRuntimeException() {
throw new NullPointerException("Runtime exception from SubClass");
}
}
public class Main {
public static void main(String[] args) {
SubClass subClass = new SubClass();
try {
subClass.throwCheckedException();
} catch (FileNotFoundException e) {
System.out.println("Caught exception: " + e.getMessage());
}
try {
subClass.throwRuntimeException();
} catch (NullPointerException e) {
System.out.println("Caught exception: " + e.getMessage());
}
}
}
在这个例子中,SuperClass有两个方法:一个抛出受检异常IOException,另一个抛出运行时异常RuntimeException。SubClass覆盖了这两个方法,并分别抛出了FileNotFoundException(IOException的子类)和NullPointerException(RuntimeException的子类)。在main方法中,我们创建了一个SubClass实例,并尝试调用这两个覆盖后的方法。我们使用try-catch语句捕获并处理这些异常。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。