Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 재정의하는 동안 던지기에서 부모 자식 계층이 중요합니까?

<시간/>

특정 메서드에서 throw된 예외(선택됨)를 처리하려고 할 때 Exception을 사용하여 예외를 잡아야 합니다. 예외가 발생한 클래스 또는 수퍼 클래스입니다.

같은 방법으로 슈퍼 클래스의 메서드를 재정의하는 동안 예외가 발생하면 -

  • 하위 클래스의 메서드는 동일한 예외 또는 하위 유형을 throw해야 합니다.

  • 하위 클래스의 메서드는 상위 유형을 throw하지 않아야 합니다.

  • 예외를 발생시키지 않고 재정의할 수 있습니다.

Demo, SuperTest 및 Super라는 세 개의 클래스가 (계층적) 상속에 있는 경우 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

예외를 포착한 클래스가 동일하지 않거나 예외 또는 발생한 예외의 수퍼 클래스가 아닌 경우 컴파일 시간 오류가 발생합니다.

같은 방법으로 메서드를 재정의하는 동안 throw된 예외는 동일해야 하거나 재정의된 메서드에서 throw된 예외의 상위 클래스가 아니면 컴파일 시간 오류가 발생합니다.

예시

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