हमें इसकी आदत है
class ClassTypeA implements InterfaceTypeA {}
class ClassTypeB extends ClassTypeA {}
और इन नियमों से कोई भी मामूली विचलन हमें बहुत भ्रमित करता है।
एक प्रकार से बंधे हुए वाक्य रचना को परिभाषित किया गया है
TypeBound:
extends TypeVariable
extends ClassOrInterfaceType {AdditionalBound}
( JLS 12> 4.4। प्रकार चरTypeBound )
यदि हम इसे बदलते तो हम निश्चित रूप से इस implementsमामले को जोड़ते
TypeBound:
extends TypeVariable
extends ClassType {AdditionalBound}
implements InterfaceType {AdditionalBound}
और दो समान रूप से संसाधित खंडों के साथ समाप्त होता है
ClassOrInterfaceType:
ClassType
InterfaceType
( JLS 12> 4.3। संदर्भ प्रकार और मूल्य>ClassOrInterfaceType )
सिवाय हमें भी ध्यान रखने की आवश्यकता होगी implements, जो आगे चीजों को जटिल करेगा।
मेरा मानना है कि यह मुख्य कारण extends ClassOrInterfaceTypeहै extends ClassTypeऔर implements InterfaceTypeजटिल अवधारणा के भीतर चीजों को सरल रखने के बजाय - और इसका उपयोग किया जाता है । समस्या हम सही शब्द दोनों को कवर करने की जरूरत नहीं है है extendsऔर implementsऔर हम निश्चित रूप से एक को पेश करने नहीं करना चाहती।
<T is ClassTypeA>
<T is InterfaceTypeA>
हालाँकि extendsयह कुछ गड़बड़ लाता है जब यह एक इंटरफ़ेस के साथ जाता है, यह एक व्यापक शब्द है और इसका उपयोग दोनों मामलों का वर्णन करने के लिए किया जा सकता है। अपने दिमाग को एक प्रकार से विस्तारित करने की अवधारणा ( एक वर्ग का विस्तार नहीं, एक इंटरफ़ेस को लागू नहीं करने ) की धुन बनाने की कोशिश करें । आप एक प्रकार के पैरामीटर को दूसरे प्रकार से प्रतिबंधित करते हैं और इससे कोई फर्क नहीं पड़ता कि वास्तव में वह प्रकार क्या है। यह केवल यह मायने रखता है कि यह इसकी ऊपरी सीमा है और यह इसका सुपरपाइप है ।
implements?" - "क्योंकि वहाँ केवल हैextends"।