2011-03-20 12 views
5

मुझे जावा में विरासत के फायदे पता हैं, लेकिन मेरे लिए यह स्वीकार करना मुश्किल है कि इसके नुकसान भी हैं। क्या कोई मुझे जावा में विरासत का एक बुरा उदाहरण दे सकता है?जावा में विरासत का बुरा उदाहरण क्या हो सकता है?

+0

आप सभी को धन्यवाद :) – Supereme

उत्तर

7
  • Stack extends Vector। एक ढेर एक वेक्टर नहीं है।
  • Properties extends Hashtable। गुणों की एक तालिका हैश तालिका नहीं है।

प्रभावी जावा से उद्धरण के लिए this answer देखें।

यह का उपयोग कर क्या पहले से ही Vector (वैसे ही Properties के लिए) में कार्यान्वित किया जाता द्वारा Stack कार्यान्वयन लिखना आसान था, लेकिन यह समस्याओं बनाया - see here

5

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

इस तरह निरंतर इंटरफेस का उपयोग आम तौर पर इन दिनों विरोधी पैटर्न माना जाता है। जावा 5 के बाद से, आप लगातार इंटरफेस को परिभाषित करने के बजाय स्थिरांक से जुड़े इंटरफ़ेस और static imports के बजाय enums का उपयोग कर सकते हैं।

Effective Java by Josh Bloch:

निरंतर इंटरफ़ेस पैटर्न से इंटरफेस के एक गरीब इस्तेमाल होता है। वह वर्ग आंतरिक रूप से कुछ स्थिरांक का उपयोग एक कार्यान्वयन विस्तार है। निरंतर इंटरफ़ेस को कार्यान्वित करने से इस कार्यान्वयन के विवरण वर्ग के निर्यात किए गए API में रिसाव हो जाते हैं।

+0

वाह, मैं _so_ खुश हूं कि मैंने कभी अपने विभिन्न ब्राउनफील्ड सॉफ्टवेयर परियोजनाओं में कभी सामना नहीं किया है ... – David

1

मुझे विश्वास है कि जब तक यह "है-ए" दिशानिर्देश का पालन करता है और इसे लागू करने वाला व्यक्ति इसे समझता है और इसके बारे में कोई गड़बड़ नहीं करता है तो वास्तव में कोई नुकसान नहीं होता है।

4

वहाँ एक बहुत अच्छी लेख here विरासत बनाम के उपयोग के बारे में बात कर रहा है जावा में रचना, उदाहरण के साथ और दूसरे पर एक का उपयोग क्यों करें। एक साक्षात्कार here भी है जिसने इस विषय पर चर्चा की (Gang of Four का संदर्भ "विरासत पर रचना का पक्ष लेने" के लिए)।

यह बहुत व्यापक है, कम से कम मेरे लिए, बहुत वास्तव में दिलचस्प विषय है। बहुत से शुरुआती प्रोग्रामर कुछ विरासत में जा रहे हैं और एक खराब डिजाइन पथ शुरू करते हैं, हमेशा यह नहीं सीखते कि कैसे पॉलिमॉर्फिज्म काम करता है और बेहतर सॉफ्टवेयर लिखने के लिए वे किस डिजाइन पैटर्न और तकनीकों का लाभ उठा सकते हैं। आप एक वस्तु उन्मुख प्रोग्रामर हैं, तो आप कभी नहीं बहुरूपता, इंटरफेस, विरासत, संरचना, कपोल-कल्पना, आदि के बारे में बहुत ज्यादा जानकारी प्राप्त कर सकते

1

अपरिपक्वता अक्षमता के बिना किसी अन्य की मार्गदर्शन बौद्धिकता का उपयोग है । इम्मानुअल कांत

यदि आप कहते हैं: "यह, आप को स्वीकार करने के लिए मुश्किल है यह नुकसान भी है।", तो मैं इसे समझता हूं - आप नुकसान के बारे में जानते हैं और आपके पास कुछ नैतिक संघर्ष या विचारों का भ्रम है, जो आपके ज्ञान प्रकृति पर सवाल उठाते हैं।" सुनना "और" सुनना "जैसी दो अलग-अलग चीजें हैं, मैं नहीं कर सकता आप समझते हैं, अगर आप अपने आप को कोशिश मत करो

आप को समझने के लिए चाहते हैं, एक किताब पढ़ने की कोशिश उदाहरण के लिए:।

  • प्रभावी जावा (आइटम 16): विरासत से अधिक पक्ष संरचना (Link)
संबंधित मुद्दे