class A {
public void process() { System.out.print("A,"); }
}
public class B extends A
{
public void process() throws IOException { //LINE 23
super.process();
System.out.print("B,");
throw new IOException();
}
public static void main(String[] args) {
try { new B().process(); }
catch (IOException e) { System.out.println("Exception"); }
}
}
Этот вопрос из SCJP 6, в книге говорится, что компиляция завершится ошибкой из-за ошибки в строке 23. Но я узнал, что вы не можете генерировать более широкое исключение, когда переопределяете метод из родительского класса. В этом примере мой метод родительского класса не выдает никаких исключений, а мой закрытый метод выдает IOException, который является подклассом Exception. Тогда почему он не работает?
Более того, я считаю, что если мой метод родительского класса не выдает исключения, по умолчанию он считается (( public void process() throws Exception. ))
. Это правда??