मुझे आश्चर्य हुआ कि क्या यह एक निजी विधि को अंतिम रूप में घोषित करने के लिए समझ में आता है, और मैंने सोचा कि यह समझ में नहीं आता है। लेकिन मैंने कल्पना की कि एक अनन्य स्थिति है और इसे समझने के लिए कोड लिखा:आंतरिक वर्ग निजी अंतिम विधि को ओवरराइड क्यों कर सकता है?
public class Boom {
private void touchMe() {
System.out.println("super::I am not overridable!");
}
private class Inner extends Boom {
private void touchMe() {
super.touchMe();
System.out.println("sub::You suck! I overrided you!");
}
}
public static void main(String... args) {
Boom boom = new Boom();
Boom.Inner inner = boom.new Inner();
inner.touchMe();
}
}
यह संकलित और काम किया। "मैं बनाना चाहिए touchMe() अंतिम" मैंने सोचा था और यह किया:
public class Boom {
private final void touchMe() {
System.out.println("super::I am not overridable!");
}
private class Inner extends Boom {
private void touchMe() {
super.touchMe();
System.out.println("sub::You suck! I overrided you!");
}
}
public static void main(String... args) {
Boom boom = new Boom();
Boom.Inner inner = boom.new Inner();
inner.touchMe();
}
}
और यह भी काम करता है और मुझे
[email protected]:~$ java Boom
super::I am not overridable!
sub::You suck! I overrided you!
क्यों कहता है?
यह "छुपा" या "शैडोइन" या कुछ है। क्या बाहरी प्रकार का विस्तार बाहरी वर्ग का विस्तार करना थोड़ा बुरा है (यहां तक कि वास्तव में भी, वास्तव में)।/'बूम आंतरिक = boom.new आंतरिक(); ' –
का अच्छा उदाहरण है कि आपको @ ओवरराइड एनोटेशन का उपयोग क्यों करना चाहिए। सुनिश्चित करें कि आप वास्तव में विधि – Shawn
पर ओवरराइड कर रहे हैं, क्या इसे 'सुपर ...' दो बार नहीं लिखना चाहिए? * अद्यतन * नहीं मी culpa। समझा। – DerMike