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 個
SEO | [PR] !uO z[y[WJ Cu | ||