आज मैंने कुछ अजीब आंतरिक (गैर स्थैतिक) वर्ग व्यवहार के बारे में ठोकर खाई।आंतरिक वर्ग के अलग-अलग सदस्य व्यवहार यदि आंतरिक वर्ग बाहरी वर्ग का विस्तार करता है?
अगर मैं निम्नलिखित वर्गों है ...
class B {
String val = "old";
void run(){
val = "new";
System.out.println(val); // outputs: new
new InnerB().printVal(); // outputs: new
}
private class InnerB {
void printVal(){ System.out.println(val); }
}
}
new B().run();
... सब कुछ स्पष्ट हो रहा है। इनरबी का उदाहरण बी के उदाहरण से संबंधित है, इसलिए यदि इसे आउटपुट वैल होना चाहिए तो यह पहले से ही प्रतिस्थापित मूल्य 'नया' प्रिंट करता है।
लेकिन यदि आंतरिक वर्ग बाहरी वर्ग को फैलाता है तो यह काम नहीं करता है।
class B {
String val = "old";
void run(){
val = "new";
System.out.println(val); // outputs: new
new InnerB().printVal(); // outputs: new
new InheritedB().printVal(); // outputs: old new
}
private class InnerB {
void printVal(){ System.out.println(val); }
}
private class InheritedB extends B{
void printVal(){ System.out.println(val + " "+ B.this.val); }
}
}
new B().run(); // outputs: new new old!
अगर मैं कंस्ट्रक्टर्स मैं यह भी देखना है कि बी का एक नया उदाहरण यदि InheritedB के कहने बनाई गई है बनाया जाएगा पर एक नजर है।
मुझे यह बहुत अजीब लगता है ... क्या कोई यह समझा सकता है कि यह अंतर क्यों है?
आप सुनिश्चित करें कि आप मतलब नहीं था 'InheritedB फैली InnerB' हैं? – user3707125
बस मेरी मन की शांति के लिए, कृपया मुझे बताएं कि आप इसे वास्तविक कोड में करने की योजना नहीं बना रहे हैं, कि आप यह देखने के लिए बस गड़बड़ कर रहे थे कि क्या हुआ। – jpmc26