आइए हम एक साक्षात्कार प्रश्न करें। सुपरक्लास में NullPointerException को फेंकने वाली एक विधि है। क्या हम इसे RuntimeException को फेंकने वाली विधि से ओवरराइड कर सकते हैं?
इस प्रश्न का उत्तर देने के लिए, आइए जानते हैं कि एक अनियंत्रित और जाँच अपवाद क्या है।
चेक किए गए अपवादों को स्पष्ट रूप से पकड़ा या प्रचारित किया जाना चाहिए जैसा कि बेसिक ट्राइ-कैच-एंड एक्सेप्शन हैंडलिंग में वर्णित है। अनियंत्रित अपवादों की यह आवश्यकता नहीं है। उन्हें पकड़ा या फेंका हुआ घोषित नहीं करना है।
जावा में जाँच किए गए अपवाद java.lang.Exception वर्ग का विस्तार करते हैं। अनियंत्रित अपवाद java.lang.RuntimeException का विस्तार करते हैं।
सार्वजनिक वर्ग NullPointerException RuntimeException का विस्तार करता है
अनियंत्रित अपवाद java.lang.RuntimeException का विस्तार करते हैं। Thst क्यों NullPointerException एक Uncheked अपवाद है।
एक उदाहरण लेते हैं: उदाहरण 1:
public class Parent {
public void name() throws NullPointerException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws RuntimeException{
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
parent.name();// output => child
}
}
कार्यक्रम सफलतापूर्वक संकलित करेगा। उदाहरण 2:
public class Parent {
public void name() throws RuntimeException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws NullPointerException {
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
parent.name();// output => child
}
}
कार्यक्रम भी सफलतापूर्वक संकलित करेगा। इसलिए यह स्पष्ट है कि अनियंत्रित अपवादों के मामले में कुछ भी नहीं होता है। अब, आइए एक नज़र डालते हैं कि चेक किए गए अपवादों के मामले में क्या होता है। उदाहरण 3: जब बेस क्लास और चाइल्ड क्लास दोनों एक चेक किए गए अपवाद को फेंकते हैं
public class Parent {
public void name() throws IOException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws IOException{
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
try {
parent.name();// output=> child
}catch( Exception e) {
System.out.println(e);
}
}
}
कार्यक्रम सफलतापूर्वक संकलित करेगा। उदाहरण 4: जब चाइल्ड क्लास विधि बेस क्लास की समान विधि की तुलना में बॉर्डर चेक किए गए अपवाद को फेंक रही है।
import java.io.IOException;
public class Parent {
public void name() throws IOException {
System.out.println(" this is parent");
}
}
public class Child extends Parent{
public void name() throws Exception{ // broader exception
System.out.println(" child ");
}
public static void main(String[] args) {
Parent parent = new Child();
try {
parent.name();//output=> Compilation failure
}catch( Exception e) {
System.out.println(e);
}
}
}
कार्यक्रम संकलन में विफल हो जाएगा। इसलिए, हमें सावधान रहना होगा जब हम चेक किए गए अपवादों का उपयोग कर रहे हैं।