Это то понятно. Нюанс вот в чем - если уж так сложилось, то на самом деле - можно. Речь идет о том, что в подклассе можно указать throws RuntimeException (это один из двух видов неконтролируемых исключений, 1-ый вид неконтролируемых исключений - Error).
Пример полностью корректного кода (проверил в Eclipse):
class AnyClass
{
{
public static void main(String [] args)
{
System.out.println("AnyClass.main()");
AnyClass anyClass= new AnyClass();
anyClass.testInnerValue();
}
{
System.out.println("AnyClass.main()");
AnyClass anyClass= new AnyClass();
anyClass.testInnerValue();
}
void testInnerValue()
{
InnerB ib = new InnerB();
try
{
int iv = ib.getInnerValue();
}
catch (Exception e)
{
System.out.println("Test testInnerValue() is OK.");
}
}
{
InnerB ib = new InnerB();
try
{
int iv = ib.getInnerValue();
}
catch (Exception e)
{
System.out.println("Test testInnerValue() is OK.");
}
}
class InnerA
{
// В методе подкласса исключения throws нет.
public int getInnerValue()
{
return 5;
}
}
class InnerB extends InnerA
{
/* В переопределяемом методе суперкласса
исключение throws есть. */
@Override
public int getInnerValue() throws RuntimeException
{
throw new RuntimeException("bla-bla-bla");
}
}
{
// В методе подкласса исключения throws нет.
public int getInnerValue()
{
return 5;
}
}
class InnerB extends InnerA
{
/* В переопределяемом методе суперкласса
исключение throws есть. */
@Override
public int getInnerValue() throws RuntimeException
{
throw new RuntimeException("bla-bla-bla");
}
}
Еще Хорстманн пишет, что исключения, расширяющие RuntimeException - это исключения, свидетельствующие о возможных ошибках программирования (выход за границы массива и т.д.) и заведомое указание в коде перехвата ошибки выхода за границу массива - плохая практика программирования.
В данном же случае... Про то генеральная линия партии предельно четко в книге не обозначена, но из текста подразумевается, что "в крайнем случае, уж, вот так". И в самом деле - попробуйте применить полиморфизм к ссылочной переменной такого суперкласса и с неожидаемым, вдруг, исключением, если инстанцирован такой вот подкласс с хаками...
0 коммент.:
Отправить комментарий