Главная » Java » Предложения throws и переопределение методов Java

0

 

При переопределении унаследованного метода или реализации метода абстрактного класса необходимо обеспечить совместимость предложения throws нового метода с соответствующим предложением метода, подвергающегося переопределению или реализации (не зависимо от того, абстрактный он или нет).

Существует простое правило – при переопределении или реализации не позволяется задавать в предложении throws нового метода больше объявляемых исключений, нежели в исходном методе. Доводы вполне объяснимы – код, написанный в расчете на взаимодействие с методом в начальной редакции, не готов к обработке каких бы то ни было дополнительных объявляемых исключений, а потому такие исключения не должны генерироваться. Исключения производных классов могут выбрасываться, поскольку они будут отловлены блоками catch, соответствующими базовым типам. Если переопределенный или реализованный метод производного класса не выбрасывает исключений, их не следует и объявлять – вы, вероятно, помните (см. раздел 3.9.1 на странице 111), что методу сlоnе класса, реализующего интерфейс сlonеаblе, вовсе не обязательно объявлять о поддержке исключения типа cloneNotSupportedException. Вообще говоря, объявлять или не объявлять исключения – это вопрос дизайна: если вы упомянете исключение в объявлении метода, тогда соответствующему методу производного класса будет позволено генерировать это исключение, а в противном случае – нет.

Если объявление метода служит предметом множественного наследования

(скажем, оно присутствует в нескольких унаследованных интерфейсах либо одновременно в базовых интерфейсе и классе), предложение throws метода производного класса должно быть совместимо с соответствующими предложениями одноименных методов всех унаследованных классов. Как мы упоминали в разделе 4.3.2 на странице 132, единственная реальная проблема в ситуациях множественного наследования одноименного метода состоит в том, способна ли единственная реализация метода удовлетворять контрактам всех унаследованных классов.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии