При переопределении метода в Java правила обработки исключений отличаются в зависимости от типа исключения.
Да, ты можешь переопределить метод, который выбрасывает NullPointerException, методом, который выбрасывает RuntimeException. Так как NullPointerException — это подкласс RuntimeException, это валидное переопределение. Ты можешь выбросить:
Принципиальная разница зависит от типа исключения:
Непроверяемые исключения (RuntimeException и его подклассы):
NullPointerException → дочерний класс выбрасывает RuntimeException ✓Проверяемые исключения:
Такой дизайн обеспечивает соответствие принципу подстановки Лисков. Объект подкласса должен быть пригоден везде, где ожидается объект суперкласса. Если бы переопределённый метод выбрасывал более широкое проверяемое исключение, вызывающий код не смог бы его правильно обработать, нарушив контракт.
Это правило применяется только к непроверяемым исключениям. С проверяемыми исключениями ты должен быть строже, а не мягче в том, что выбрасываешь из переопределённого метода.
При переопределении метода, который выбрасывает NullPointerException, метод подкласса может выбросить RuntimeException, потому что NullPointerException — это подкласс RuntimeException.
Новый — ещё не проверен сообществом
Вы