2012-01-11 13 views
10

जैसा कि मैंने विभिन्न जावा पुस्तक और ट्यूटोरियल से पढ़ा है, इंटरफ़ेस में घोषित चर स्थिरांक हैं और इन्हें ओवरराइड नहीं किया जा सकता है।इंटरफ़ेस के चर को ओवरराइड करना?

मैं इसे

interface A_INTERFACE 
{ 
    int var=100; 
} 

class A_CLASS implements A_INTERFACE 
{ 
    int var=99; 
    //test 
    void printx() 
    { 
     System.out.println("var = " + var); 
    } 
} 

class hello 
{ 

    public static void main(String[] args) 
    { 
     new A_CLASS().printx(); 
    } 
} 

परीक्षण करने के लिए एक सरल कोड बना दिया और इसे वर बाहर प्रिंट = 99

वर अधिरोहित हो रहा है? मैं पूरी तरह उलझन में हूँ। किसी भी सुझाव के लिए आपका धन्यवाद!


आपको बहुत बहुत धन्यवाद! मैं इस इंटरफेस चीज के लिए काफी नया हूँ। इसे समझने के लिए "छाया" कुंजी शब्द है। मैं संबंधित सामग्रियों को देखता हूं और इसे समझता हूं। एक अंतरफलक में किसी भी चर के लिए

+0

आप "ओवरराइड" एक चर, केवल एक विधि है। –

उत्तर

11

यह अतिरिक्त भ्रम के साथ ओवरराइड नहीं है, लेकिन छायांकित है क्योंकि इंटरफ़ेस में निरंतर स्थिर भी है।

इस प्रयास करें:

A_INTERFACE o = new A_CLASS(); 
System.out.println(o.var); 

आप एक गैर स्थिर रास्ते में एक स्थिर क्षेत्र तक पहुँचने के बारे में चेतावनी एक संकलन समय मिलना चाहिए।

और अब इस

A_CLASS o = new A_CLASS(); 
System.out.println(o.var); 
System.out.println(A_INTERFACE.var); // bad name, btw since it is const 
4

डिफ़ॉल्ट हस्ताक्षर

public static final ... 

तो आप इसे किसी भी तरह से ओवरराइड नहीं कर सकते है।

0

उस इंटरफ़ेस में आपके द्वारा घोषित वैरिएबल उस वर्ग को दिखाई नहीं देता है जो इसे कार्यान्वित करता है।

यदि आप स्थिर और अंतिम में एक चर घोषित करते हैं, यानी निरंतर, तो यह कार्यान्वयन करने वालों के लिए दृश्यमान है।

+2

यह 'स्थिर 'और' अंतिम 'और' सार्वजनिक 'है (' इंटरफ़ेस 'होने के कारण) – Thilo

10

आपने चर को ओवरराइड नहीं किया है, आप छायांकित इसे एक अधिक विशिष्ट स्कोप में घोषित एक नए-नए इंस्टेंस वैरिएबल के साथ। यह आपके printx विधि में मुद्रित चर है।

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