Как правильно переопределять методы с исключениями в Java

При overriding можно сохранить throws, убрать checked-исключения или сузить их типы. Нельзя добавить более широкое либо несвязанное checked-исключение; unchecked-исключения не ограничены таким правилом.

Короткий ответ

Что ответить на собеседовании

При overriding можно сохранить throws, убрать checked-исключения или сузить их типы. Нельзя добавить более широкое либо несвязанное checked-исключение; unchecked-исключения не ограничены таким правилом.

Подробный разбор

Ответ с пояснениями

Условие

Какие варианты переопределения допустимы? Можно ли:

  • Сохранить сигнатуру метода без изменений
  • Добавить новые исключения в объявление
  • Удалить ранее объявленные исключения

Ответ

При overriding можно сохранить throws, убрать checked-исключения или сузить их типы. Нельзя добавить более широкое либо несвязанное checked-исключение; unchecked-исключения не ограничены таким правилом.

Например, если родитель объявляет void read() throws IOException, потомок вправе объявить throws FileNotFoundException либо вообще не писать throws. Объявление throws Exception недопустимо. RuntimeException можно добавить независимо от throws родителя. Сам throws не является частью сигнатуры метода для перегрузки: сделать два метода, различающихся только throws, нельзя. Также сохраняются правила доступа и совместимости возвращаемого типа.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее