না, জাভাতে ওভাররাইড করা মেথডটি ওভাররাইড করা মেথডের ফেলা এক্সেপশনের সুপার-টাইপ (পেরেন্ট ক্লাস) থ্রো করতে পারে না। এটি কম্পাইল টাইম এরর возник করবে।
উদাহরণ
নিচের উদাহরণে সুপারক্লাসের readFile() মেথডটি FileNotFoundException থ্রো করে, কিন্তু সাবক্লাসে ওভাররাইড করা মেথডটি এর পেরেন্ট ক্লাস IOException থ্রো করার চেষ্টা করেছে।
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
abstract class Super {
public String readFile(String path) throws FileNotFoundException {
throw new FileNotFoundException();
}
}
public class ExceptionsExample extends Super {
@Override
public String readFile(String path) throws IOException {
// method body ......
}
}
কম্পাইল টাইম এরর
ExceptionsExample.java:13: error: readFile(String) in ExceptionsExample cannot override readFile(String) in Super
public String readFile(String path) throws IOException {
^
overridden method does not throw IOException
1 error
কারণ: পলিমরফিজমের নিয়ম অনুযায়ী, যদি একটি সুপারক্লাস রেফারেন্স দিয়ে সাবক্লাসের মেথড কল করা হয়, তবে কলার (caller) শুধু সুপারক্লাসে ডিক্লেয়ার করা এক্সেপশনগুলো হ্যান্ডল করার জন্য প্রস্তুত থাকে। যদি সাবক্লাস ব্রোডার এক্সেপশন থ্রো করে, তবে কলার সেটি হ্যান্ডল করতে পারবে না, যা রানটাইমে সমস্যা সৃষ্টি করবে। এই 이유로 জাভা কম্পাইলার এটিকে ব্লক করে।