Да, это разрешено: подкласс может сказать Java, что он не собирается выдавать определенное исключение, и Java примет его.
Это полезно в ситуациях, когда вы точно знаете класс вточка вызова.
Рассмотрим следующую настройку:
class A {
public void foo() throws Exception {}
}
class B extends A {
public void foo() {}
}
Вам разрешено делать это в контексте, который не перехватывает Exception
:
B b = new B();
b.foo();
Java видит, что b
имеет тип B
, метод которого не генерирует проверенное исключение, поэтому допустим вызов foo()
.
Однако это приводит к ошибке:
A a = new B();
a.foo();
незарегистрированное исключение Исключение;должен быть перехвачен или объявлен как выброшенный
Теперь Java должна рассмотреть подпись A.foo()
для вызова.Подпись включает throws Exception
часть, поэтому Java должна убедиться, что проверенное исключение правильно обработано.