Computer >> Máy Tính >  >> Lập trình >> Java

Cấu trúc phân cấp con của mẹ có quan trọng khi ném trong khi ghi đè trong Java không?

Khi bạn cố gắng xử lý một ngoại lệ (đã chọn) được đưa ra bởi một phương thức cụ thể, bạn cần nắm bắt nó bằng cách sử dụng Ngoại lệ lớp hoặc siêu lớp của Ngoại lệ đã xảy ra.

Theo cách tương tự khi ghi đè phương thức của một siêu lớp, nếu nó ném ra một ngoại lệ -

  • Phương thức trong lớp con phải ném cùng một ngoại lệ hoặc kiểu con của nó.

  • Phương thức trong lớp con không được ném loại siêu của nó.

  • Bạn có thể ghi đè nó mà không phải ném ra bất kỳ ngoại lệ nào.

Khi bạn có ba lớp có tên là Demo, SuperTest và, Super trong (phân cấp) kế thừa, nếu Demo và SuperTest có một phương thức có tên là sample () .

Ví dụ

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");
      }
   }
}

Đầu ra

Phương thức
sample() method of the SuperTest class

Nếu lớp mà bạn bắt một ngoại lệ không giống hoặc, ngoại lệ hoặc, siêu lớp của ngoại lệ được nêu ra, bạn sẽ gặp lỗi thời gian biên dịch.

Theo cách tương tự, khi ghi đè một phương thức, ngoại lệ được ném ra phải giống nhau hoặc siêu lớp của ngoại lệ được phương thức ghi đè ném ra, nếu không sẽ xảy ra lỗi thời gian biên dịch.

Ví dụ

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");
      }
   }
}

Đầu ra

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