オーバーライドされたメソッドでより高いチェック例外をスローするクラスがあります。許可されていないことはわかっていますが、なぜこのコードが機能するのですか?
package personaltestlevel1;
public class OverrideExcept {
public static void main(String args[]) {
S1 s = new S2();
try
{
s.show();
}catch (NullPointerException e){
System.out.printf(e.getMessage());
}
}
}
class S1{
public void show() throws NullPointerException {
try
{
System.out.println("not overriden");
}catch (Exception e){
throw new NullPointerException();
}
}
}
class S2 extends S1{
public void show() throws RuntimeException {
try
{
System.err.println("overriden");
}catch (Exception e){
throw new RuntimeException();}
}
}
サンプルをチェック例外で更新しました - とにかく動作します。