私Parent
のクラスは:
import java.io.IOException;
public class Parent {
int x = 0;
public int getX() throws IOException{
if(x<=0){
throw new IOException();
}
return x;
}
}
私はextend
このクラスでサブクラスを作成しますChild
:
public class Child1 extends Parent{
public int getX(){
return x+10;
}
}
クラスのgetXメソッドをオーバーライドしているときに、メソッド定義から句を削除したことに注意してください。これで、コンパイラーによる異常な動作が予想されます。Child
throws
new Parent().getX() ;
try-catch
予想どおり、ブロックで囲まずにコンパイルすることはありません。
new Child().getX() ;
ブロックで囲まずにコンパイルしtry-catch
ます。
ただし、以下のコード行にはtry-catchブロックが必要です。
Parent p = new Child();
p.getX();
これは予測可能であるため、つまり、実行時のポリモーフィズム中に親クラス参照を使用して子メソッドを呼び出すことができるので、Javaの設計者が、特定の親クラスメソッドをオーバーライドするときにメソッド定義にthrows句を含めることを必須にしないのはなぜですか?つまり、親クラスのメソッドの定義にthrows句が含まれている場合、それをオーバーライドするときに、オーバーライドするメソッドにもthrows句を含める必要があります。