2015-11-20 6 views
6

जावा पर कुछ पुस्तकों से मेरी समझ के अनुसार, इंटरफेस कक्षाओं का विस्तार नहीं कर सकता है।हमें इंटरफेस को केवल java.lang.Object से विस्तारित करने की अनुमति देने की आवश्यकता क्यों होगी और कोई अन्य वर्ग नहीं?

लेकिन सभी इंटरफेस ऑब्जेक्ट क्लास से वारिस विधियां करते हैं। यह क्यों है?

यदि इंटरफ़ेस ऑब्जेक्ट क्लास से विस्तारित नहीं होता है। तो यह कोड कैसे काम करता है?

interface A 
{  
public boolean equals(Object o); 

} 

class InterfaceAndObjectClass 
{ 

    public static void main(String[] args) 
    { 
     A a = null; 

     a.equals(null); 

     a.hashCode(); 

     a.toString(); 
    } 
} 

कृपया मुझे यह समझाने में सहायता करें कि इंटरफ़ेस में ऑब्जेक्ट क्लास विधि का उपयोग कैसे करें।

उत्तर

6

एक इंटरफ़ेस में Object कक्षा के सभी विधियों में निहित रूप से शामिल है। और चूंकि उस इंटरफ़ेस को लागू करने वाली कोई भी कक्षा Object का उप-वर्ग है, इसमें उन सभी विधियों का कार्यान्वयन शामिल है।

JLS 9.2

एक अंतरफलक कोई सीधा superinterfaces है, तो इंटरफ़ेस परोक्ष हस्ताक्षर है, वापसी प्रकार आर के साथ एक सार्वजनिक सार सदस्य विधि मीटर वाणी, और खंड टी फेंकता के साथ प्रत्येक सार्वजनिक दृष्टांत विधि मीटर करने के लिए इसी हस्ताक्षर एस, रिटर्न टाइप आर, और ऑब्जेक्ट में घोषित क्लॉज टी फेंकता है, जब तक कि एक ही हस्ताक्षर के साथ एक सार विधि, एक ही रिटर्न प्रकार, और संगत फेंकता क्लॉज स्पष्ट रूप से इंटरफ़ेस द्वारा घोषित नहीं किया जाता है।

+0

तो आप कह सकते हैं इंटरफ़ेस स्पष्ट रूप से विस्तारित नहीं है objecs वर्ग के सभी तरीकों पर निर्भर करता है? क्या आप अंतरफलक में अंतर्निहित ऑब्जेक्ट क्लास विधियों को समझा सकते हैं। धन्यवाद –

+1

@ Z.I.J "अंतर्निहित रूप से" का अर्थ है कि जहां तक ​​कंपाइलर का संबंध है, कोई इंटरफ़ेस जो अन्य इंटरफेस का विस्तार नहीं करता है ऑब्जेक्ट क्लास के सभी तरीकों की घोषणा करता है। – Eran

+0

सार कक्षाएं वस्तु का विस्तार करती हैं, और आप उन पर नए ऑपरेटर का आह्वान नहीं कर सकते हैं। तो अगर इंटरफेस ऑब्जेक्ट (जो वे नहीं करते) बढ़ाते हैं, तो इसका मतलब यह नहीं है कि आप उन्हें तुरंत चालू कर पाएंगे। –

1

ईरान बिल्कुल सही है। असल में इंटरफेस ऑब्जेक्ट क्लास का विस्तार या कार्यान्वयन नहीं करता है। यह स्पष्ट रूप से ऑब्जेक्ट क्लास के सभी तरीकों को शामिल करता है। नोट (आगे):

आप एक ही (सार) प्रणाली की घोषणा (इसी नाम हस्ताक्षर, वापसी प्रकार के साथ, और प्रकार फेंकता है, तो संकलक यह विचार करेंगे के रूप में अधिभावी (ठीक है), लेकिन यदि आप अलग अलग वापसी प्रकार के साथ घोषित या अलग फेंकता प्रकार संकलक एक ही (संगत) वापसी प्रकार रखने के लिए मजबूर या खंड फेंकता जाएगा। नीचे घोषित करने के लिए

कोशिश अपने इंटरफेस में विधि के बराबर होती है। public int equals(Object obj); // यह दिखा देंगे संकलन समय त्रुटि वापसी प्रकार है // संगत नहीं है। (यह बूलियन नहीं होना चाहिए)

+1

अंतःक्रिया में ऑब्जेक्ट क्लास विधि क्यों इंटरफ़ेस में विधियों को रखने के लिए तंत्र क्या है? –

+0

चूंकि आपका इंटरफ़ेस उस ऑब्जेक्ट को संदर्भित करेगा जो आपके इंटरफ़ेस को कार्यान्वित करता है। और यह ऑब्जेक्ट ऑब्जेक्ट क्लास के सभी इंस्टेंस विधियों का वारिस करेगा, इसलिए ये आपके इंटरफ़ेस में उपलब्ध कराए गए हैं ताकि आप उन्हें अपने इंटरफ़ेस संदर्भ के माध्यम से भी कॉल कर सकें। – nwzhaider

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