हाँ, अपवाद हायरार्की मेथड ओवरराइडिंग में throws क्लॉज को नियंत्रित करती है। नियम:
- ओवरराइडिंग विधि वही चेक्ड अपवाद या उसके सबक्लास फेंक सकती है।
- यह सुपरक्लास अपवाद नहीं फेंक सकती (अधिक सामान्य)।
- यह कोई चेक्ड अपवाद नहीं फेंकने का चयन कर सकती है।
उदाहरण: मान्य (सबक्लास अपवाद)
class Demo {
public void sample() throws ArrayIndexOutOfBoundsException { ... }
}
class SuperTest extends Demo {
public void sample() throws IndexOutOfBoundsException { ... } // ArrayIndexOutOfBoundsException का सुपरक्लास - अमान्य!
}उपरोक्त अमान्य है क्योंकि IndexOutOfBoundsException, ArrayIndexOutOfBoundsException का पैरेंट है।
उदाहरण: मान्य (सबक्लास अपवाद)
class Demo {
public void sample() throws IOException { ... }
}
class SuperTest extends Demo {
public void sample() throws EOFException { ... } // IOException का सबक्लास - मान्य
}कंपाइलर प्रवर्तन
यदि सबक्लास एक व्यापक चेक्ड अपवाद फेंकता है, तो कंपाइलर त्रुटि देता है: "overridden method does not throw X"।
अनचेक्ड अपवाद
RuntimeException और उसके सबक्लास इन नियमों के अधीन नहीं हैं।