मेरे Parent
वर्ग है:विरासत, विधि हस्ताक्षर, विधि अधिभावी और खंड
public class Child1 extends Parent{
public int getX(){
return x+10;
}
}
सूचना जबकि अधिभावीgetX:
import java.io.IOException;
public class Parent {
int x = 0;
public int getX() throws IOException{
if(x<=0){
throw new IOException();
}
return x;
}
}
मैं extend
इस वर्ग के एक उपवर्ग Child
लिखने के लिएChild
कक्षा में विधि, मैंने विधि परिभाषा से throws
खंड हटा दिया है। अब यह संकलक द्वारा एक विषम व्यवहार में परिणाम जो उम्मीद है:
new Parent().getX() ;
एक try-catch
ब्लॉक में यह enclosing के बिना संकलन नहीं करता है, के रूप में उम्मीद।
new Child().getX() ;
एक try-catch
ब्लॉक में यह enclosing के बिना संकलित करता है।
लेकिन कोड की निम्न पंक्तियों को ट्राइक-कैच ब्लॉक की आवश्यकता है।
Parent p = new Child();
p.getX();
इस रन-टाइम बहुरूपता के दौरान एक बच्चे विधि आह्वान करने के लिए एक माता पिता के वर्ग संदर्भ का उपयोग कर यानी अनुमान किया जा सकता है के रूप में, क्यों जावा के डिजाइनरों यह विधि परिभाषा थोड़ी देर में खंड फेंकता शामिल करने के लिए अनिवार्य नहीं किया एक विशेष पेरेंट क्लास विधि ओवरराइडिंग? मेरा मतलब है कि अगर एक अभिभावक वर्ग विधि ने अपनी परिभाषा में खंड फेंक दिया है, तो इसे ओवरराइड करने के दौरान ओवरराइडिंग विधि में थ्रो क्लॉज भी शामिल होना चाहिए, है ना?
अपने अंतिम वाक्य में, "तो, जबकि यह अधिभावी *** अधिभावी *** विधि (उपवर्ग में विधि) भी खंड फेंकता शामिल होना चाहिए" क्या आपका मतलब ??? – Bhushan