Since: May/4th/2005
メソッドに宣言する throws リストには、継承時のオーバーライドについて注意すべき点があります。
throws 節にチェック例外を含める場合は、サブクラスでのオーバーライド時に注意が必要です。スーパークラスのメソッドがスローする可能性のあるもの以外を指定することはできません。但し、非チェック例外については、サブクラス側のメソッドの throws 節に独自に追加することができます。
次のクラス ExceptionKo のメソッド getMsg() は、スーパークラス ExceptionOya のメソッドをオーバーライドしています。クラス ExceptionKo のメソッド getMsg() のなかでは、チェック例外である java.io.IOException をスローすると宣言しています。スーパークラスのメソッドでは、何もスローしていないので、これは明らかに違反であり、コンパイル時にコンパイル・エラーが発生します。
class ExceptionOya {
String getMsg() {
return "Oya.";
}
}
class ExceptionKo extends ExceptionOya {
String getMsg() throws java.io.IOException {
return "Ko. ";
}
}
class ExceptionExtendsDemo {
public static void main(String[] args) {
ExceptionKo obj = new ExceptionKo();
System.out.println(obj.getMsg());
}
}
>javac ExceptionExtendsDemo.java
ExceptionDemo.java:8: ExceptionKo の getMsg() は ExceptionOya の getMsg() をオー
バーライドできません。オーバーライドされたメソッドは java.io.IOException をスロ
ーしません。
String getMsg()
^
エラー 1 個