2010-08-17 7 views
14

इन कक्षाओं पर विचार करें:जावा में पैरेंट और चाइल्ड क्लास में एक ही इंस्टेंस वैरिएबल हो सकता है?

class Parent { 
int a; 
} 

class Child extends Parent { 
int a; // error? 
} 

Child में a की घोषणा int a के कई घोषणाओं की वजह से संकलन त्रुटि नहीं करना चाहिए?

उत्तर

20

child.aछाया (या छुपाता) parent.a

यह कानूनी जावा है, लेकिन इससे बचा जाना चाहिए। मैं उम्मीद करता हूं कि आपके आईडीई के पास आपको इसके बारे में चेतावनी देने का विकल्प होगा।

नोट, हालांकि, यह केवल एक मुद्दा है क्योंकि आप पहले से ही परिवर्तनीय दुनिया के सामने आ चुके हैं। यदि आप सुनिश्चित करते हैं कि आपके सभी चर प्रारंभ करने के लिए निजी हैं (फ़ील्ड के कार्यान्वयन से विधियों के एपीआई को अलग करना) तो इससे कोई फर्क नहीं पड़ता कि माता-पिता और बच्चे दोनों के समान फ़ील्ड नाम हैं - बच्चा नहीं होगा वैसे भी माता-पिता के खेतों को देखने में सक्षम हो। यदि आप बच्चे से माता-पिता को एक विधि ले जाते हैं, तो यह भ्रम पैदा कर सकता है, और यह आमतौर पर पठनीयता के लिए बहुत अच्छा नहीं है, लेकिन यह छुपा स्थिति से बेहतर है।

4

यह आपके चचेरे भाई से शादी करने जैसा थोड़ा सा है; कानूनी, लेकिन सलाह नहीं दी।

यह सभी प्रकार के भ्रमित व्यवहार का कारण बन सकता है, क्योंकि सबक्लास घोषणापत्र अभिभावक वर्ग की घोषणा को छुपाता है।

+0

बर्बर के लिए सार्वजनिक चर होने से प्राप्त कर सकते हैं ......... – Andrew

9

इसे छायांकन कहा जाता है और डेवलपर्स के लिए समस्याएं पैदा कर सकती हैं।

आपके मामले में:

Child child = new Child(); 
child.a = 1; 
System.out.println(child.a); 
System.out.println(((Parent)child).a); 

मुद्रित होगा

1 
0 
0

किसी भी संकलन त्रुटि या रनटाइम त्रुटि वहाँ नहीं होगा।

public class Parent { 
private String name; 
private int age; 
} 

public class Child extends Parent { 
String parent; 
public int age; 
} 

यहाँ आप मुख्य वर्ग से child.age उपयोग करने में सक्षम हो जाएगा ... यह केवल लाभ आप व्युत्पन्न वर्ग

संबंधित मुद्दे