2010-08-21 12 views
6

जावा में, क्या इंटरफ़ेस को विस्तारित करने का कोई तरीका है।एक इंटरफ़ेस को विस्तारित होने से रोकने के लिए

finalinterface में जोड़ा नहीं जा सकता है, इसलिए मुझे पता था कि इंटरफ़ेस को विस्तारित करने से रोकने के लिए कोई तरीका है या नहीं।

+4

ऐसा करने के लिए प्रेरणा क्या है? मेरी राय में, अर्थात्, यदि आप समझते हैं कि इंटरफेस क्या हैं और उनके लिए क्या उपयोग किया जाता है, तो प्राप्त करने के लिए कुछ भी नहीं है। – Santa

+0

यदि आप इंटरफ़ेस नहीं बनाते हैं तो इसे तब तक बढ़ाया नहीं जा सकता जब तक कि कुछ और इसे नहीं बनाता है, इसलिए नंबर 1 बताएं। – IAdapter

उत्तर

2

इंटरफ़ेस को विस्तारित करने से रोकने का कोई तरीका नहीं है।

आप यह पता लगा सकते हैं कि किसी ने प्रतिबिंब का उपयोग करके रनटाइम पर अपना इंटरफ़ेस बढ़ाया है या नहीं।

+0

क्या आप विस्तार से बता सकते हैं कि प्रतिबिंब के माध्यम से इंटरफ़ेस को विस्तारित किया गया है या नहीं? – JWhiz

+0

@JWhiz: आपका दूसरा प्रश्न इस के समान ही है: http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface केवल अंतर यह है कि आप इंटरफेस में दिलचस्पी रखते हैं, कक्षाओं में नहीं , लेकिन तकनीक एक ही है। –

3

यहां समस्या एक वैचारिक है। इंटरफेस का विस्तार किया जाना है क्योंकि इनका उपयोग नहीं किया जा सकता है।

आप क्या कर सकते हैं इंटरफ़ेस को पैकेज के अंदर रखकर इसे डिफ़ॉल्ट दृश्यता दें। उस पैकेज के अंदर केवल कक्षाएं ही उस इंटरफ़ेस को कार्यान्वित कर सकती हैं।

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

+0

मुझे लगता है कि उनका मतलब है कि एक और इंटरफ़ेस दिए गए इंटरफ़ेस से बढ़ाया गया है। –

+3

सही, लेकिन अवधारणा अभी भी कुंजी है: एक इंटरफ़ेस यह कहने का एक तरीका है कि कुछ विधियां एक निश्चित तरीके से काम करती हैं। एक इंटरफ़ेस को विस्तारित करना सिर्फ यह कह रहा है कि सिस्टम में कुछ अन्य इंटरफ़ेस है। एक इंटरफ़ेस को परिभाषित करने पर प्रतिबंध लगाने के लिए यह समझ में नहीं आता है कि "अंतिम" कीवर्ड कक्षाओं के साथ काम करता है, जहां वास्तविक वर्ग मूल डिज़ाइन के विपरीत तरीकों से उपयोग किया जा सकता है यदि उस वर्ग को बढ़ाया गया हो। –

0

यह पहले पूछे जाने वाले प्रश्न - final interface in java के समान है।

मैंने दो जवाब दिए।

  1. हां, byte code engineering के माध्यम से। परिणामी इंटरफ़ेस को विस्तारित नहीं किया जा सकता है लेकिन इसका कोई व्यावहारिक मूल्य नहीं है
  2. हां, annotations इंटरफेस हैं जिन्हें अन्य इंटरफेस द्वारा विस्तारित नहीं किया जा सकता है।

इसके अतिरिक्त, आप इंटरफ़ेस को कक्षा के अंदर रख सकते हैं, इसे निजी एक्सेस संशोधक दे सकते हैं, और सुनिश्चित कर सकते हैं कि उस वर्ग फ़ाइल में कोई इंटरफ़ेस इसे विस्तारित नहीं करता है।

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

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