जब आप किसी विधि को ओवरराइड करते हैं तो आपको विधि के हस्ताक्षर रखना चाहिए और इसकी दृश्यता को कम नहीं कर सकता है। अब मैंने कोशिश की कि जब मैं गुणों के साथ ऐसा करता हूं तो क्या खुशी होती है। मैं आश्चर्यचकित था - यह काम करता है! अपने आप को देखो:विशेषताएँ ओवरराइड
public class A {
public Integer myAttribute;
}
public class B extends A {
public String myAttribute;
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.myAttribute = "myString";
((A) b).myAttribute = 1337;
System.out.println(b.myAttribute);
System.out.println(((A)b).myAttribute);
}
}
तो यह सुपर क्लास में के रूप में ही attibute नाम के साथ एक उपवर्ग में एक विशेषता लिखने के लिए संभव है, लेकिन आप अलग अलग दृश्यता (संशोधक) और प्रकार का उपयोग कर सकते हैं। तो मैं कहूंगा कि सुपरक्लास और सबक्लास में गुण लगभग एक दूसरे से पूरी तरह से स्वतंत्र हैं।
अब यदि आप वास्तव में सुपरक्लास और उपclass में एक ही विशेषता नाम का उपयोग करते हैं तो आप सुपरक्लास की विशेषता को प्रभावी ढंग से छुपाते हैं। सबक्लास का उपयोग करके विशेषता का उपयोग करते समय, आपको सबक्लास की विशेषता मिलती है। लेकिन सुपरक्लास की विशेषता भी है! आपको सुपरक्लास की विशेषता को बाहर से एक्सेस करने के लिए एक कलाकार करना है। "सुपर" कीवर्ड के अंदर से उपयोगी होना चाहिए।
प्रश्न 1: मूल रूप से आपके पास एक ही नाम के साथ दो अलग-अलग विशेषताएं हैं। क्या यह LSP तोड़ता है?
मैं इस विवरण में क्यों आया यह यह है: मैं एक स्वयं लिखित दृढ़ता ढांचे के साथ प्रयोग कर रहा हूं। मैं किसी ऑब्जेक्ट की पूर्ण आंतरिक स्थिति को पढ़ना चाहता हूं और उस स्थिति को कायम रखना चाहता हूं। मैंने उप-प्रकार से शुरू होने और सुपरक्लास पर ट्रैवर्सिंग के माध्यम से प्रतिबिंब के माध्यम से सभी गुणों के मूल्यों को पढ़ा। अब अगर सुपरक्लास और सबक्लास में एक ही नाम के साथ दो विशेषताएं हैं, तो मुझे कक्षा को याद रखना होगा जो विशेषता गुणों को सही गुणों पर मैप करने के लिए एक विशेषता घोषित करता है और किसी ऑब्जेक्ट की स्थिति को पुनर्स्थापित करता है।
प्रश्न 2: कोई अन्य विचार इस विस्तार से कैसे निपटें? प्रश्न 3: अन्य दृढ़ता ढांचे इस विस्तार को कैसे संभालते हैं?
मैंने कभी भी इस विवरण को उपयोग में नहीं देखा। शायद एक ही नाम के साथ दो विशेषताओं को लिखना थोड़ा बदसूरत है, लेकिन यह संभव है और किसी भी दृढ़ता ढांचे के साथ सामना किया जा सकता है। शायद ऐसी स्थितियां हैं जहां यह तकनीक उपयोगी हो सकती है।
अग्रिम में Thans।
सभी उत्तरदाताओं के लिए Thx। – anonymous