কম্পিউটার টিউটোরিয়াল

জাভাতে মেথড ওভাররাইডিং-এ throws কীওয়ার্ডের ক্ষেত্রে পেরেন্ট-চাইল্ড হিয়ারার্কি গুরুত্বপূর্ণ কি?

হ্যাঁ, জাভাতে মেথড ওভাররাইডিং-এ চেকড এক্সেপশন হ্যান্ডলিং-এ পেরেন্ট-চাইল্ড হিয়ারার্কি অত্যন্ত গুরুত্বপূর্ণ। নিয়মগুলো হলো:

  1. সাবক্লাসের মেথড সুপারক্লাসের মেথডের চেয়ে সেইম এক্সেপশন বা তার সাব-টাইপ (ন্যারোয়ার) থ্রো করতে পারে।
  2. সাবক্লাসের মেথড সুপারক্লাসের এক্সেপশনের সুপার-টাইপ (ব্রোডার) থ্রো করতে পারে না।
  3. সাবক্লাসের মেথড কোনো এক্সেপশন থ্রো না করে ওভাররাইড করতে পারে (এটি সবচেয়ে ন্যূনতম)।

উদাহরণ ১: বৈধ (সাব-টাইপ থ্রো করা)

ArrayIndexOutOfBoundsException হলো IndexOutOfBoundsException-এর সাবক্লাস।

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

নোট: উপরের উদাহরণে সাবক্লাসে সুপার-টাইপ (IndexOutOfBoundsException) থ্রো করা হয়েছে, যা নিয়ম লঙ্ঘন। এটি কম্পাইল এরর দেবে। নিচের উদাহরণটি সঠিক।

উদাহরণ ২: বৈধ (সাব-টাইপ থ্রো করা - সঠিক)

import java.io.IOException;
import java.io.EOFException; // IOException-এর সাবক্লাস

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 caught: " + ex);
        }
    }
}

উদাহরণ ৩: অবৈধ (সুপার-টাইপ থ্রো করা - এরর)

class Demo {
    public void sample() throws EOFException { // সাব-টাইপ
        System.out.println("Demo");
    }
}

class SuperTest extends Demo {
    public void sample() throws IOException { // সুপার-টাইপ (ভুল!)
        System.out.println("SuperTest");
    }
}
// কম্পাইল এরর: overridden method does not throw IOException

কারণ: পলিমরফিজমে Demo obj = new SuperTest(); হলে কলার EOFException ক্যাচ করার কোড লিখে। কিন্তু সাবক্লাস IOException থ্রো করলে কলার সেটি ক্যাচ করতে পারবে না (কারণ IOException ব্রোডার)। এই কারণে জাভা এটিকে কম্পাইল টাইমে বাধা দেয়।

  1. জাভাতে ইন্টারফেস

  2. জাভাতে অ্যাবস্ট্রাক্ট ক্লাস

  3. জাভাতে ফাইনাল ক্লাস

  4. জাভাতে super কীওয়ার্ড