2011-11-15 13 views
5

जावा में एक उपयोगी सुविधा एक सदस्य विधि को अंतिम रूप में घोषित करने का विकल्प है, ताकि इसे वंश वर्गों में ओवरराइड नहीं किया जा सके। सदस्य चर के लिए कुछ समान है?जावा: किसी सदस्य चर के ओवरराइड को रोकें

class Parent { 
    public final void thisMethodMustRemainAsItIs() { /* ... */ } 
    public String thisVariableMustNotBeHidden; 
} 

class Child extends Parent { 
    public final void thisMethodMustRemainAsItIs() { /* ... */ } // Causes an error 
    public String thisVariableMustNotBeHidden; // Causes no error! 
} 

संपादित करें: माफ करना, मैं परिदृश्य के बारे में अधिक विस्तार से बता देना चाहिए: मैं माता पिता के वर्ग में एक चर, उस बच्चे के वर्गों (इसलिए यह निजी नहीं होना चाहिए) के द्वारा अद्यतन किया जाना चाहिए है। हालांकि, एक बच्चे के वर्ग ही नाम के साथ एक चर बनाता है, तो यह सोचेंगे कि यह माता पिता के चर को अपडेट किया गया है, भले ही यह अपने आप प्रतिलिपि अद्यतन:

class Parent { 
    protected String myDatabase = null; // Should be updated by children 
    public void doSomethingWithMyDatabase() { /* ... */ } 
} 

class GoodChild extends Parent { 
    public GoodChild() { 
     myDatabase = "123"; 
     doSomethingWithMyDatabase(); 
    } 
} 

class BadChild extends Parent { 
    protected String myDatabase = null; // Hides the parent variable! 
    public BadChild() { 
     myDatabase = "123"; // Updates the child and not the parent! 
     doSomethingWithMyDatabase(); // NullPointerException 
    } 
} 

यह वह जगह है जो मैं रोकना चाहते हैं।

+2

उन्हें अंतिम accessors साथ काम नहीं करेंगे? – soulcheck

उत्तर

9

अपने परिवर्तनीय निजी घोषित करें, और गेटर का उपयोग करें।

+0

encapsulation को संरक्षित करने के लिए वैसे भी वैरिएबल प्राइवेट घोषित करना बेहतर है। या संरक्षित जब आप उपclasses को इसे एक्सेस करने की अनुमति देना चाहते हैं, जो आपका मामला यहां नहीं है। लेकिन सार्वजनिक नहीं, कभी नहीं। – Guillaume

+0

यहां तक ​​कि संरक्षित मामले में भी मैं निजी चर और संरक्षित एक्सेसर्स का उपयोग करने की सलाह देता हूं। – Puce

+0

मुझे इस वर्ग को बाल कक्षाओं में अपडेट करने की आवश्यकता है - मेरा संपादन देखें। –

4

बनाने को निजी रखना यह private

+0

मुझे इस वर्ग को बाल कक्षाओं में अपडेट करने की आवश्यकता है - मेरा संपादन देखें। –

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