Предположим, у нас есть класс Foo
с одним методом, который может выдать IOException
.
public abstract class Foo {
public abstract void foo() throws IOException;
}
Однако, когда я расширяю этот класс как FooImpl
, вот так:
public class FooImpl extends Foo {
public void foo() throws Exception {
throw new Exception("This cannot throw!");
}
}
Это приводит к ошибке времени компиляции: «Перезаписанный метод не генерирует исключение java.lang.Exception»
Я понимаю, что это потому, что переопределяющий метод "может выбрасывать только проверенные исключения своего родительского метода и любые непроверенные исключения"
Почему это так? Почему мы должны запрещать себе создавать более широкое исключение?
(я тоже ищу обходной путь)
Спасибо!