2012-08-16 16 views
6

मेरे पास मेरे दिमाग में एक सवाल है, इंटरफ़ेस में सदस्य चर क्यों नहीं हो सकता है एक स्थिर निरंतर हो .. स्थिर होने का तर्क मेरे दिमाग में सही था कि अगर किसी को इंटरफ़ेस के चर का उपयोग करने की आवश्यकता है तो यह आवश्यक है क्योंकि यह स्थैतिक होना है क्योंकि हम इंटरफ़ेस का उदाहरण नहीं बना सकते हैं लेकिन अंतिम आवश्यकता क्यों उत्पन्न होती है ?? नीचे दिए गए कोड पहले से पता चलता है कि इंटरफेस सदस्य चर स्थिर अंतिम भले ही हम न डिफ़ॉल्ट रूप से यह उल्लेख किया जाता है ....इंटरफ़ेस के सदस्य चर अंतिम होना चाहिए ... क्यों?

interface inter{ 

     int a=10; // It becomes final static by default 

     public void interFunc(); 
} 

class cls implements inter{ 

     public void interFunc(){ 

      System.out.println("In Class Method WITH a's Value as --> "+a); 
     } 
} 

class Test{ 

     public static void main(String[] args){ 

      inter in= new cls(); 

      in.interFunc();  
      } 
} 

धन्यवाद !!!

+0

http://stackoverflow.com/questions/2430756/why-are-interface-variables-static-and-final-by-default –

उत्तर

4

अच्छी तरह से एक सदस्य चर के लिए, मुझे लगता है कि यह स्थैतिक होना आवश्यक है क्योंकि ऑब्जेक्ट को इंटरफ़ेस के लिए नहीं बनाया जा सकता है ताकि सदस्य चर को एक्सेस करने के लिए इसे स्थिर और कक्षा के माध्यम से एक्सेस किया जा सके।

0

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

+0

की डुप्लिकेट उद्धरण के लिए स्रोत का लिंक शामिल करें। साथ ही, "सामान" उद्धृत करने के लिए मार्कअप '> सामान' का उपयोग किया जा सकता है। –

+0

ठीक है .. अच्छा धन्यवाद दोस्त .. यह कुछ अच्छी व्याख्या है यहां कुछ जाल साफ़ करता है ... :) – AnkitChhajed

0

जावा सदस्य चर को डिफ़ॉल्ट रूप से अंतिम होना चाहिए क्योंकि इंटरफेस को तत्काल नहीं माना जाना चाहिए। वे डिफ़ॉल्ट रूप से स्थिर भी हैं। तो आप अपना मूल्य नहीं बदल सकते हैं और उन्हें असाइन किए जाने के बाद भी उन्हें पुन: असाइन नहीं किया जा सकता है। इंटरफेस पर Here's कुछ। आशा करता हूँ की ये काम करेगा।

11

इंटरफेस एक वर्ग नहीं है, यह नियमों का एक सेट है, और तत्काल नहीं किया जा सकता है, तो इसमें अंदर कोई भी अस्थिर डेटा कंटेनर नहीं हो सकता है। इंटरफेस के अंदर केवल स्थिरांक सेट किए जा सकते हैं, हालांकि यह निराश है, क्योंकि इंटरफेस violates encapsulation approach में स्थिरांक घोषित करना।

+2

"इसे मत करो" के लिए +1 :) –

+0

प्रश्न से संबंधित नहीं है, लेकिन मुझे नहीं दिखाई देता एक इंटरफ़ेस (साझा ज्ञान) में निरंतर घोषित कैसे encapsulation का उल्लंघन करता है। इंटरफेस प्रदान करने तक भी encapsulation का उल्लंघन है। हालांकि, यह सभी लिंक में समझाया गया है: आवश्यकतानुसार इंटरफ़ेस में कई चर घोषित करें - इसे कार्यान्वित करने/विस्तारित करने के बजाय बस 'स्थिर आयात' का उपयोग करें। – uvsmtid

0

जावा- एकाधिक विरासत लागू नहीं करता है लेकिन इंटरफ़ेस द्वारा हम प्राप्त कर सकते हैं।

interface i1{ 
    int a=1; 
} 

interface i2{ 
    int a=2; 
} 

class exampleInterface implements i1,i2{ 
    public static void main(String...a){ 

     //As interface members are static we can write like this 
     //If its not static then we'll write sysout(a) ... which gives ambiguity error. 
     //That's why it is static. 

     System.out.println(i2.a); 
    } 
} 

अब यह स्थिर है, क्योंकि यह अंतिम होना चाहिए क्योंकि अगर अपने अंतिम नहीं तो किसी भी वर्ग को लागू करने में यह मूल्य और अन्य वर्ग जो इंटरफेस लागू कर रहा है बदली हुई मूल्य प्राप्त होगा बदल जाएगा। नीचे उदाहरण के लिए यदि कक्षा x स्थिर है तो अंतिम नहीं है।

class x{ 
    static int r=10; 
} 

class y extends x{ 
    static void fun(){ 
     x.r=20; 
     System.out.println(x.r); 
    } 
} 

class m extends x{ 
    void fun(){ 
     System.out.println(x.r); 
    } 
} 

public class Test{ 
    public static void main(String[] args) { 

     y.fun(); 
     m obj=new m(); 
     obj.fun(); 
    } 
} 
संबंधित मुद्दे