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

WBOY
リリース: 2023-08-19 13:49:23
転載
1279 人が閲覧しました

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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート