ホームページ  >  記事  >  Java  >  Java でオーバーライドするときに例外をスローする場合、親子階層は重要ですか?

Java でオーバーライドするときに例外をスローする場合、親子階層は重要ですか?

WBOY
WBOY転載
2023-08-19 13:49:231234ブラウズ

Java でオーバーライドするときに例外をスローする場合、親子階層は重要ですか?

特定のメソッドによってスローされた (チェックされた) 例外を処理しようとする場合は、Exception クラスまたは例外が発生したスーパークラスを使用して例外をキャッチする必要があります。 。

同様に、スーパークラスのメソッドをオーバーライドするときに例外がスローされる場合、-

  • サブクラスのメソッドは同じ例外またはそのサブタイプをスローする必要があります。

  • サブクラス内のメソッドは、スーパータイプをスローしてはなりません。

  • #例外をスローせずにオーバーライドできます。

Demo、SuperTest、Super という継承する 3 つのクラス (階層) がある場合、Demo と SuperTest に

sample() メソッドという名前のクラスがあるとします。

リアルタイムのデモンストレーション

class Demo {
   public void sample() throws ArrayIndexOutOfBoundsException {
      System.out.println("sample() method of the Demo class");
   }
}
class SuperTest extends Demo {
   public void sample() throws IndexOutOfBoundsException {
      System.out.println("sample() method of the SuperTest class");
   }
}
public class Test extends SuperTest {
   public static void main(String args[]) {
      Demo obj = new SuperTest();
      try {
         obj.sample();
      }catch (ArrayIndexOutOfBoundsException ex) {
         System.out.println("Exception");
      }
   }
}

出力

sample() method of the SuperTest class

例外をキャッチしたクラスがスローされた例外と同じでない場合、または異なる場合例外のスーパークラスの場合、コンパイル時エラーが発生します。

同様に、メソッドをオーバーライドする場合、スローされる例外は、オーバーライドされたメソッドまたはそのスーパークラスによってスローされる例外と同じである必要があります。そうでない場合は、コンパイル時エラーが発生します。

デモンストレーション

import java.io.IOException;
import java.io.EOFException;
class Demo {
   public void sample() throws IOException {
      System.out.println("sample() method of the Demo class");
   }
}
class SuperTest extends Demo {
   public void sample() throws EOFException {
      System.out.println("sample() method of the SuperTest class");
   }
}
public class Test extends SuperTest {
   public static void main(String args[]) {
      Demo obj = new SuperTest();
      try {
         obj.sample();
      }catch (EOFException ex){
         System.out.println("Exception");
      }
   }
}

出力

Test.java:12: error: sample() in SuperTest cannot override sample() in Demo
public void sample() throws IOException {
            ^
overridden method does not throw IOException
1 error

D:\>javac Test.java
Test.java:20: error: unreported exception IOException; must be caught or declared to be thrown
   obj.sample();
              ^
1 error

以上がJava でオーバーライドするときに例外をスローする場合、親子階層は重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。