যখন একটি সুপারক্লাস মেথড এক্সেপশন থ্রো করে, তাকে ওভাররাইড করার সময় আপনাকে নির্দিষ্ট নিয়মাবলী মেনে চলতে হয়।
১. একই এক্সেপশন বা সাবটাইপ থ্রো করতে হবে
সুপারক্লাস মেথড যদি নির্দিষ্ট এক্সেপশন থ্রো করে, সাবক্লাসের মেথডটি একই এক্সেপশন বা তার সাবটাইপ থ্রো করতে হবে।
উদাহরণ (সাবটাইপ)
নিচের উদাহরণে, সুপারক্লাসের readFile() মেথড IOEXception থ্রো করে এবং সাবক্লাসের readFile() মেথড FileNotFoundException থ্রো করে।
যেহেতু 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 IOException {
throw new IOException();
}
}
public class ExceptionsExample extends Super {
@Override
public String readFile(String path) throws FileNotFoundException {
Scanner sc = new Scanner(new File("E://test//sample.txt"));
String input;
StringBuffer sb = new StringBuffer();
while (sc.hasNextLine()) {
input = sc.nextLine();
sb.append(" " + input);
}
return sb.toString();
}
public static void main(String args[]) {
String path = "E://test//sample.txt";
ExceptionsExample obj = new ExceptionsExample();
try {
System.out.println(obj.readFile(path));
} catch (FileNotFoundException e) {
System.out.println("Make sure the specified file exists");
}
}
}
আউটপুট
Tutorials Point is an E-learning company...
উদাহরণ (একই এক্সেপশন)
একইভাবে যদি সাবক্লাস সুপারক্লাসের মতো একই এক্সেপশন থ্রো করে, প্রোগ্রাম সফলভাবে কম্পাইল এবং এক্সিকিউট হয়।
abstract class Super {
public void sampleMethod() throws FileNotFoundException {
System.out.println("Method of superclass");
}
}
public class ExceptionsExample extends Super {
public void sampleMethod() throws FileNotFoundException {
System.out.println("Method of Subclass");
}
public static void main(String args[]) {
ExceptionsExample obj = new ExceptionsExample();
obj.sampleMethod();
}
}
আউটপুট
Method of Subclass
২. সুপারটাইপ এক্সেপশন থ্রো করা যাবে না
সুপারক্লাস মেথড যদি নির্দিষ্ট এক্সেপশন থ্রো করে, সাবক্লাসের মেথড তার সুপারটাইপ থ্রো করতে পারবে না।
উদাহরণ (এরর)
সুপারক্লাসের readFile() FileNotFoundException থ্রো করে, সাবক্লাসের readFile() IOException থ্রো করে (যা FileNotFoundException-এর সুপারটাইপ)।
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
৩. কোনো এক্সেপশন থ্রো না করেও ওভাররাইড করা যায়
সুপারক্লাস মেথড যদি এক্সেপশন থ্রো করে, সেটি কোনো এক্সেপশন থ্রো না করে ওভাররাইড করা যায়।
উদাহরণ
abstract class Super {
public void sampleMethod() throws FileNotFoundException {
System.out.println("Method of superclass");
}
}
public class ExceptionsExample extends Super {
public void sampleMethod() {
System.out.println("Method of Subclass");
}
public static void main(String args[]) {
ExceptionsExample obj = new ExceptionsExample();
obj.sampleMethod();
}
}
আউটপুট
Method of Subclass
সারসংক্ষেপ: ওভাররাইডিং মেথড: (ক) চেকড এক্সেপশন নেই বা (খ) সুপারক্লাসের চেকড এক্সেপশনের সাবক্লাস থ্রো করতে পারে বা (গ) একই চেকড এক্সেপশন থ্রো করতে পারে। আনচেকড এক্সেপশন (RuntimeException) যেকোনো সময় থ্রো করা যায়।