Программирование на Java

Переопределение методов и исключения


При переопределении методов следует помнить, что если переопределяемый метод объявляет список возможных исключений, то переопределяющий метод не может расширять этот список, но может его сужать. Рассмотрим пример:

public class BaseClass{ public void method () throws IOException { ... } }

public class LegalOne extends BaseClass { public void method () throws IOException { ... } }

public class LegalTwo extends BaseClass { public void method () { ... } }

public class LegalTree extends BaseClass { public void method () throws EOFException,MalformedURLException { ... } }

public class IllegalOne extends BaseClass { public void method () throws IOException,IllegalAccessException { ... } }

public class IllegalTwo extends BaseClass { public void method () { ... throw new Exception(); } }

В данном случае:

  • определение класса LegalOne будет корректным, так как переопределение метода method() верное (список ошибок не изменился);
  • определение класса LegalTwo будет корректным, так как переопределение метода method() верное (новый метод не может выбрасывать ошибок, а значит, не расширяет список возможных ошибок старого метода);
  • определение класса LegalTree будет корректным, так как переопределение метода method() будет верным (новый метод может создавать исключения, которые являются подклассами исключения, возбуждаемого в старом методе, то есть список сузился);
  • определение класса IlegalOne будет некорректным, так как переопределение метода method() неверно (IllegalAccessException не является подклассом IOException, список расширился);
  • определение класса IlegalTwo будет некорректным: хотя заголовок method() объявлен верно (список не расширился), в теле метода бросается исключение, не указанное в throws.



Содержание раздела