विरासत में एक सुपरक्लास के इंस्टेंस वैरिएबल क्यों नहीं हैं?जावा विरासत - उदाहरण चर वैरिएडिंग
उत्तर
क्योंकि विरासत व्यवहार को संशोधित करने का इरादा है। व्यवहार विधियों के माध्यम से उजागर किया जाता है, और यही कारण है कि वे ओवरराइड किया जा सकता है।
फ़ील्ड व्यवहार नहीं बल्कि राज्य हैं। आपको उसको संशोधित करने की आवश्यकता नहीं है, न ही सुपरक्लास द्वारा नियोजित निजी तरीकों। वे सुपरक्लास को अपना काम करने की इजाजत देने का इरादा रखते हैं।
आप एक फ़ील्ड छुपा सकते हैं, लेकिन ओवरराइड नहीं कर सकते हैं।
छिपाने का अर्थ है कि उस क्षेत्र के आधार पर एक फ़ील्ड का अलग-अलग मूल्य होगा। उप-वर्ग में फ़ील्ड सुपर-क्लास में फ़ील्ड को "छुपा" देगा, लेकिन दोनों मौजूद हैं।
एक बेहद खराब व्यवहार का क्षेत्र को छिपाने के लिए है, लेकिन काम करता है यही कारण है कि:
public class HideField {
public static class A
{
String name = "a";
public void doIt1() { System.out.println(name); };
public void doIt2() { System.out.println(name); };
}
public static class B extends A
{
String name = "b";
public void doIt2() { System.out.println(name); };
}
public static void main(String[] args)
{
A a = new A();
B b = new B();
a.doIt1(); // print a
b.doIt1(); // print a
a.doIt2(); // print a
b.doIt2(); // print b <-- B.name hides A.name
}
}
विधि ओवरराइड गया था कि क्या, क्षेत्र A
या B
में पर निर्भर करता है पहुँचा जा सकता है।
ऐसा कभी नहीं करें! यह आपकी समस्या का समाधान कभी नहीं करता है और विरासत से संबंधित बहुत सूक्ष्म बग बनाता है।
क्योंकि:
यह
parent class
कोड टूट सकता है। उदाहरण के लिए कोड को अपनाने पर विचार (क्या निम्नलिखित कोड में लाइनobB.getInt();
के व्यवहार होगा उदाहरण अधिभावी चर की अनुमति है,):class A { int aInt; public int getInt() { return aInt; } } class B extends A { int aInt; public int getInt2() { return aInt; } public static void main(String[] args) { B obB = new B(); //What would be behavior in following line if, //instance variables overriding is allowed obB.getInt(); } }
यह तार्किक क्योंकि
child class
होना चाहिए/सभी व्यवहार को प्रतिबिंबित नहीं हैparent class
।
तो, आप केवल विरासत में मिला तरीकों/child class
में चर छिपाते हैं, लेकिन override
नहीं कर सकते हैं कर सकते हैं।
बाद Java doc from Oracle से एक उद्धरण को निर्दिष्ट क्या आपरेशन आप प्रदर्शन/child class
से उम्मीद कर सकते हैं:
आप विरासत में मिला सदस्यों का उपयोग कर सकते है के रूप में, उन्हें बदलना, उन्हें छिपाने के लिए, या उन्हें नए सदस्यों के साथ पूरक :
- विरासत वाले फ़ील्ड सीधे किसी भी अन्य फ़ील्ड की तरह उपयोग किए जा सकते हैं।
- आप उपclass में एक क्षेत्र को सुपरक्लास में एक जैसा नाम घोषित कर सकते हैं, इस प्रकार इसे छुपाएं (अनुशंसित नहीं)।
- 1. जावा विरासत ओवरराइडिंग आवृत्ति चर
- 2. जावा उदाहरण encapsulation, polymorphism, और विरासत विशेषता?
- 3. जावा के स्थिर/उदाहरण चर आपरेशन प्रदर्शन
- 4. जावा विरासत बनाम सी # विरासत
- 5. जावा में विरासत का बुरा उदाहरण क्या हो सकता है?
- 6. जावा विरासत
- 7. जावा विरासत और
- 8. कोर जावा में विरासत
- 9. जावा विरासत - यह कीवर्ड
- 10. सूची नियंत्रक उदाहरण चर
- 11. PersistenceConstructor तर्क चर नाम उदाहरण चर नाम
- 12. जावा - संदर्भ चर
- 13. डीजेगो मॉडल विरासत: मौजूदा उदाहरण (डाउनकास्ट) का उप-उदाहरण बनाएं?
- 14. जावा उदाहरण
- 15. जावा विरासत, बिल्डर पैटर्न
- 16. जावा enum विरासत
- 17. जावा इंटरफेस और विरासत
- 18. विरासत जावा-कोड
- 19. जावा विरासत - रचनाकार
- 20. जावा में गणना विरासत?
- 21. जावा जेनरिक और विरासत
- 22. विरासत और जावा
- 23. येगेज प्रोटोटाइप पैटर्न उदाहरण उदाहरण चर को कैसे संभालता है?
- 24. जावा में अंतिम फ़ील्ड की विरासत?
- 25. विरासत के साथ स्थैतिक चर का व्यवहार
- 26. जावा संग्रह इंटरफेस में विरासत
- 27. सी ++ चर - घोषणा और परिभाषित करें। विरासत
- 28. स्क्रिप्ट मोड विरासत चर में सीएमके फ़ाइल
- 29. जावास्क्रिप्ट विरासत: अभिभावकों की सरणी चर मूल्य
- 30. एकाधिक विरासत: एक अच्छा उदाहरण क्या है?
ओह यह करने के लिए अनिवार्य सलाह के लिए कई अपवर्तकों के लिए ओह। यह एक बुराई ओवरलैर्ड की तरह एक सांप में बदल रहा है .... यह कभी मदद नहीं करता है। –
ऐसे सूक्ष्म कारण हैं जिन्हें आप पसंद कर सकते हैं: विशेष रूप से स्थैतिक वर्ग फ़ील्ड के साथ जिन्हें आप सुपर या सबक्लास नाम का उपयोग करके एक्सेस करते हैं। "कभी नहीं" कहने की कोई अच्छी बात नहीं है;) – RichieHH
स्थिर का उपयोग करना पूरी तरह से एक और बात है, ओरेकल के पास @ewernli के साथ एक ही सुझाव है: http://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html – MengT