में अपवाद फेंकने के मानदंड क्या हैं जो अब तक मुझे पता है कि एक सुपरक्लास विधि को ओवरराइड करने पर उप-वर्ग को अपवाद के उप-अपवाद या उप-वर्ग को फेंकना चाहिए।सबक्लास
उदाहरण के लिए:
यह सही
class SuperClass {
public int doIt(String str, Integer... data)throws ArrayIndexOutOfBoundsException{
String signature = "(String, Integer[])";
System.out.println(str + " " + signature);
return 1;
}
}
public final class SubClass extends SuperClass {
public int doIt(String str, Integer... data) throws ArrayIndexOutOfBoundsException {
String signature = "(String, Integer[])";
System.out.println("Overridden: " + str + " " + signature);
return 0;
}
public static void main(String... args) {
SuperClass sb = new SubClass();
try {
sb.doIt("hello", 3);
} catch (Exception e) {
}
}
}
यह गलत
class SuperClass {
public int doIt(String str, Integer... data)throws ArrayIndexOutOfBoundsException{
String signature = "(String, Integer[])";
System.out.println(str + " " + signature);
return 1;
}
}
public final class SubClass extends SuperClass {
public int doIt(String str, Integer... data) throws Exception {
String signature = "(String, Integer[])";
System.out.println("Overridden: " + str + " " + signature);
return 0;
}
public static void main(String... args) {
SuperClass sb = new SubClass();
try {
sb.doIt("hello", 3);
} catch (Exception e) {
}
}
}
है लेकिन मेरा सवाल है, क्यों इस कोड ब्लॉक संकलक द्वारा सही माना जाता है ?
class SuperClass {
public int doIt(String str, Integer... data)throws ArrayIndexOutOfBoundsException{
String signature = "(String, Integer[])";
System.out.println(str + " " + signature);
return 1;
}
}
public final class SubClass extends SuperClass {
public int doIt(String str, Integer... data) throws RuntimeException {
String signature = "(String, Integer[])";
System.out.println("Overridden: " + str + " " + signature);
return 0;
}
public static void main(String... args) {
SuperClass sb = new SubClass();
try {
sb.doIt("hello", 3);
} catch (Exception e) {
}
}
}
यह मतलब यह है घोषणा कर सकते हैं, एक क्रम अपवाद सुपर क्लास विधि से फेंक दिया जाता है, तो , अपवाद पदानुक्रम में किसी भी superclass फेंक दिया जा सकता है। –
अपवाद -> रनटाइम अपवाद -> इंडेक्सऑटऑफबाउंड अपवाद -> ArrayIndexOutOfBoundException –
हाँ, यह सही है। ओवरराइड में घोषित अपवाद अपने वंशज पेड़ में होना चाहिए, यह सुपर क्लास में घोषित अपवाद से बड़ा नहीं हो सकता है। –