2013-01-23 11 views
12
interface A { 

    public void doSomething(); 
} 

interface B extends A { 

    public void doSomethingElse(); 
} 

public class AClass implements A, B { 

    public void doSomething() {} 

    public void doSomethingElse() {} 

} 

जावा इस तरह की घोषणा क्यों करता है? SubInterface (बी) को लागू करके एक ही चीज़ हासिल की जा सकती है जब दोनों इंटरफेस को लागू करने का उपयोग क्या है?कक्षा में कक्षा और कक्षा दोनों में सुपर और उप इंटरफेस लागू करना

+3

इसे अनुमति देने से क्या प्राप्त किया जाएगा? –

+0

संभावित डुप्लिकेट [माता-पिता और बाल वर्ग दोनों एक ही इंटरफ़ेस को क्यों लागू करेंगे?] (Http://stackoverflow.com/questions/5668429/why-would-both-a-parent-and-child-class-implement- -ही-इंटरफेस) –

उत्तर

3

मुझे लगता है कि "क्यों" प्रश्न जावा डिजाइनरों द्वारा ही उत्तर दिया जा सकता है।

एक कारण यह हो सकता है कि यह किसी भी मौजूदा वर्ग को तोड़ने के बिना extends A से B को दोबारा शुरू करने की अनुमति देता है जो पहले से ही लागू करने के लिए होता है।

इस निर्माण का उपयोग करने का एक अन्य कारण यह AClass के अंतिम उपयोगकर्ता को तुरंत स्पष्ट कर सकता है कि कक्षा A और B दोनों लागू करती है। इस पर Redundant implementation of List interface in ArrayList.java

2

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

interface A { ... } 
interface B extends A { ... } 
interface C extends A { ... } 
public class AClass implements B, C { ... } 

इस मामले में, ए को दो बार "लागू" किया जाता है, लेकिन यह कोई समस्या नहीं है। इसका मतलब यह है कि AClass को A, B, और C में घोषित प्रत्येक विधि को लागू करना होगा।

0

1) क्यों दो बार लागू नहीं करना अनावश्यक है लेकिन कोई भ्रम नहीं होता है।

2) इंटरफ़ेस B बदला जा सकता है (और अब A का विस्तार नहीं हो सकता है)। AClass अभी भी लागू करेगा A और B

1

इस त्रुटि होती, किसी मौजूदा सार्वजनिक इंटरफेस के लिए एक आधार के इंटरफेस को जोड़ने के लिए एक को तोड़ने परिवर्तन हो गया होता।
(यदि क्लाइंट कोड में ऐसी कक्षा है जो पहले से ही दोनों इंटरफेस लागू करती है)

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