विरासत Java (उदाहरण सहित)

⚡ स्मार्ट सारांश

विरासत Java यह एक ऐसी प्रक्रिया है जिसमें एक क्लास 'एक्सटेंड्स' कीवर्ड के माध्यम से दूसरी क्लास के फ़ील्ड और मेथड प्राप्त करती है। यह कोड के पुन: उपयोग को बढ़ावा देता है और सुपरक्लास और उसकी सबक्लास के बीच 'इज-ए' संबंध को दर्शाता है।

  • 🧬 वंशानुक्रम की परिभाषा: एक क्लास एक्सटेंड्स का उपयोग करके दूसरी क्लास के फ़ील्ड और मेथड प्राप्त करती है।
  • 👨👩👧 क्या-एक रिश्ता है: यह पैरेंट (सुपर) क्लास और चाइल्ड (सब) क्लास के पदानुक्रम को मॉडल करता है।
  • पांच प्रकार: एकल, बहु, बहुस्तरीय, पदानुक्रमित और संकर वंशानुक्रम।
  • 🚫 Java सीमा: Java यह क्लास के माध्यम से मल्टीपल या हाइब्रिड इनहेरिटेंस को सपोर्ट नहीं करता है।
  • 🔑 सुपर कीवर्ड: यह सबक्लास से पैरेंट क्लास के वैरिएबल, मेथड और कंस्ट्रक्टर तक पहुंच प्रदान करता है।
  • लाभ: यह परीक्षित कोड का पुन: उपयोग करता है और मौजूदा क्लासों को संशोधित किए बिना नई क्लासों के माध्यम से सुविधाएँ जोड़ता है।

विरासत Java

विरासत क्या है?

विरासत एक तंत्र है जिसमें एक वर्ग दूसरे वर्ग की संपत्ति प्राप्त करता है। उदाहरण के लिए, एक बच्चा अपने माता-पिता के गुणों को विरासत में प्राप्त करता है। विरासत के साथ, हम मौजूदा वर्ग के फ़ील्ड और विधियों का पुनः उपयोग कर सकते हैं। इसलिए, विरासत पुन: प्रयोज्यता की सुविधा प्रदान करती है और यह OOPs की एक महत्वपूर्ण अवधारणा है।

उत्तराधिकार क्या है? Java?

Java विरासत एक तंत्र है जिसमें एक वर्ग दूसरे वर्ग की संपत्ति अर्जित करता है। Javaजब दो क्लास के बीच “Is-A” संबंध होता है, तो हम इनहेरिटेंस का उपयोग करते हैं। पैरेंट क्लास को सुपर क्लास कहा जाता है और इनहेरिटेड क्लास को सबक्लास कहा जाता है। कीवर्ड extends उपवर्ग द्वारा सुपरक्लास की विशेषताओं को इनहेरिट करने के लिए उपयोग किया जाता है। इनहेरिटेंस महत्वपूर्ण है क्योंकि यह कोड की पुनः प्रयोज्यता की ओर ले जाता है।

Java वंशानुक्रम वाक्यविन्यास:

class subClass extends superClass
{
   //methods and fields
}

वंशानुक्रम के प्रकार Java

यहाँ विभिन्न प्रकार की विरासत दी गई है Java:

  1. एकल वंशानुक्रम
  2. एकाधिक वंशानुक्रम
  3. मल्टीलेवल इनहेरिटेंस
  4. पदानुक्रमित वंशानुक्रम
  5. संकर वंशानुक्रम

1. एकल उत्तराधिकार:

एकल वंशानुक्रम में एक वर्ग दूसरे वर्ग (केवल एक वर्ग) का विस्तार करता है।

एकल उत्तराधिकार Java
एकल वंशानुक्रम

उपरोक्त चित्र में, वर्ग B केवल वर्ग A का विस्तार करता है। वर्ग A एक सुपर क्लास है और वर्ग B एक उप-वर्ग है।

2. बहुविध वंशानुक्रम:

बहुविध वंशानुक्रम एक प्रकार का वंशानुक्रम है। Java प्रकार जहां एक वर्ग एक से अधिक वर्गों का विस्तार करता है। Java एकाधिक विरासत का समर्थन नहीं करता है.

बहुविध वंशानुक्रम Java

Java एकाधिक वंशानुक्रम

उपरोक्त चित्र के अनुसार, वर्ग C, वर्ग A और वर्ग B दोनों का विस्तार करता है।

3. बहुस्तरीय विरासत:

मल्टीलेवल इनहेरिटेंस में, एक क्लास एक व्युत्पन्न क्लास से इनहेरिट कर सकता है। इसलिए, व्युत्पन्न क्लास नए क्लास के लिए आधार क्लास बन जाता है।

बहुस्तरीय विरासत Java

मल्टीलेवल इनहेरिटेंस

चित्र में दिखाए अनुसार वर्ग C, वर्ग B का उपवर्ग है तथा B, वर्ग A का उपवर्ग है।

4. पदानुक्रमिक विरासत:

पदानुक्रमिक वंशानुक्रम में, एक वर्ग को कई उपवर्गों द्वारा विरासत में प्राप्त किया जाता है।


पदानुक्रमिक विरासत Java

पदानुक्रमित वंशानुक्रम

उपरोक्त उदाहरण के अनुसार, वर्ग B, C और D को समान वर्ग A विरासत में मिलता है।

5. संकर वंशानुक्रम:

हाइब्रिड वंशानुक्रम वंशानुक्रम के प्रकारों में से एक है Java जो एकल और बहुविध वंशानुक्रम का संयोजन है।


संकर वंशानुक्रम

संकर वंशानुक्रम

उपरोक्त उदाहरण के अनुसार, वर्ग A के सभी सार्वजनिक और संरक्षित सदस्य वर्ग D में स्थानांतरित होते हैं, पहले वर्ग B के माध्यम से और फिर वर्ग C के माध्यम से।

नोट: Java हाइब्रिड/मल्टीपल इनहेरिटेंस का समर्थन नहीं करता

विरासत Java उदाहरण

यहाँ विरासत का एक उदाहरण दिया गया है Java:


इसका उदाहरण Java विरासत

Java विरासत का उदाहरण

class Doctor {
 void Doctor_Details() {
  System.out.println("Doctor Details...");
 }
}

class Surgeon extends Doctor {
 void Surgeon_Details() {
  System.out.println("Surgen Detail...");
 }
}

public class Hospital {
 public static void main(String args[]) {
  Surgeon s = new Surgeon();
  s.Doctor_Details();
  s.Surgeon_Details();
 }
}

सुपर कीवर्ड

सुपर कीवर्ड “this” कीवर्ड के समान है। सुपर कीवर्ड का उपयोग पैरेंट क्लास के किसी भी डेटा सदस्य या विधियों तक पहुँचने के लिए किया जा सकता है। सुपर कीवर्ड का उपयोग यहाँ किया जा सकता है परिवर्तनशील, विधि और निर्माता स्तर.

सिंटेक्स:

super.<method-name>();

यह भी जांचें: - इस कीवर्ड में Java: क्या है और इसका उपयोग कैसे करें उदाहरण के साथ

उदाहरण के साथ OOP में इनहेरिटेंस सीखें

उसी बैंकिंग एप्लिकेशन पर विचार करें पिछला उदाहरण.

हमें दो अलग-अलग प्रकार के खाते खोलने हैं, एक बचत के लिए और दूसरा चेकिंग (जिसे चालू खाता भी कहा जाता है)।

OOP में वंशानुक्रम

आइए तुलना करें और अध्ययन करें कि हम कोडिंग को किस प्रकार से अपना सकते हैं संरचित और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग परिप्रेक्ष्य।

संरचनात्मक दृष्टिकोण: स्ट्रक्चर्ड प्रोग्रामिंग में, हम दो फंक्शन बनाएंगे –

  1. एक वापस लेने के लिए
  2. और दूसरा जमा कार्रवाई के लिए।

चूंकि इन कार्यों की कार्यप्रणाली सभी खातों में समान रहती है।

OOP में विरासत

ओ.ओ.पी. का दृष्टिकोण: का उपयोग करते समय उफ़ प्रोग्रामिंग दृष्टिकोण। हम दो वर्ग बनाएंगे।

  • प्रत्येक में जमा और निकासी कार्यों का कार्यान्वयन है।
  • इससे अतिरिक्त काम बेकार हो जाएगा।

OOP में विरासत

सॉफ़्टवेयर में परिवर्तन अनुरोध

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

सॉफ़्टवेयर में परिवर्तन अनुरोध

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

सॉफ़्टवेयर में परिवर्तन अनुरोध

ओ.ओ.पी. का दृष्टिकोण: OOP के दृष्टिकोण का उपयोग करते हुए, आपको केवल एक नया क्लास लिखना होगा जिसमें विड्रॉ फ़ंक्शन का अद्वितीय कार्यान्वयन हो। हमने कोड के परीक्षण किए गए भाग को कभी नहीं छुआ।

सॉफ़्टवेयर में परिवर्तन अनुरोध

एक और परिवर्तन अनुरोध

अगर आवश्यकता में और बदलाव होता है तो क्या होगा? जमाराशि की अपनी अनूठी आवश्यकता के साथ क्रेडिट कार्ड खाता जोड़ना पसंद करें.

सॉफ़्टवेयर आवश्यकता में एकाधिक परिवर्तन अनुरोध

संरचनात्मक दृष्टिकोण: संरचनात्मक दृष्टिकोण का उपयोग करते हुए आपको जमा कोड के परीक्षण किए गए भाग को फिर से बदलना होगा।

सॉफ्टवेयर में बहु-परिवर्तन अनुरोध के लिए संरचनात्मक दृष्टिकोण

ओ.ओ.पी. का दृष्टिकोण: लेकिन ऑब्जेक्ट-ओरिएंटेड अप्रोच का उपयोग करके, आप डिपॉजिट मेथड के अपने विशिष्ट कार्यान्वयन के साथ एक नई क्लास बनाएंगे (नीचे दी गई छवि में लाल रंग से हाइलाइट किया गया है)। इसलिए, भले ही संरचनात्मक प्रोग्रामिंग शुरू में एक आसान तरीका लगे, लेकिन लंबे समय में OOP ही बेहतर साबित होता है।

एकाधिक परिवर्तन अनुरोध के प्रति OOP का दृष्टिकोण

OOPs में वंशानुक्रम के लाभ

लेकिन कोई यह तर्क दे सकता है कि सभी वर्गों में, आपके पास कोड के दोहराए गए टुकड़े हैं।

इस पर काबू पाने के लिए, आप एक पैरेंट क्लास बनाते हैं, जैसे कि "अकाउंट" और जमा और निकासी के समान फ़ंक्शन को लागू करते हैं। और चाइल्ड क्लास को "अकाउंट" क्लास विरासत में देते हैं। ताकि उन्हें अकाउंट क्लास में निकासी और जमा फ़ंक्शन तक पहुँच मिल सके। फ़ंक्शन को अलग-अलग लागू करने की आवश्यकता नहीं है। यह है जावा में विरासत. .

OOPs में वंशानुक्रम के लाभ

OOPs में वंशानुक्रम के लाभ

अक्सर पूछे जाने वाले प्रश्न

Java यह "डायमंड प्रॉब्लम" से बचने के लिए क्लासों की मल्टीपल इनहेरिटेंस से बचता है, जहां कंपाइलर यह तय नहीं कर पाता कि किस इनहेरिटेड मेथड का उपयोग करना है। इसके बजाय, Java यह किसी क्लास को समान लचीलापन सुरक्षित रूप से प्राप्त करने के लिए कई इंटरफेस को लागू करने की अनुमति देता है।

'this' कीवर्ड वर्तमान ऑब्जेक्ट और उसके सदस्यों को संदर्भित करता है, जबकि 'super' सीधे पैरेंट क्लास को संदर्भित करता है। सबक्लास से पैरेंट क्लास के वेरिएबल्स, मेथड्स या कंस्ट्रक्टर को कॉल करने के लिए 'super' का उपयोग किया जाता है।

इनहेरिटेंस एक "इज-ए" संबंध को दर्शाता है, जहाँ एक सबक्लास अपने पैरेंट क्लास को एक्सटेंड करता है। कंपोजीशन एक "हैज-ए" संबंध को दर्शाता है, जहाँ एक क्लास में अन्य ऑब्जेक्ट्स होते हैं। कंपोजीशन अक्सर अधिक लचीला होता है और लूजली कपल्ड डिज़ाइन के लिए बेहतर माना जाता है।

एआई क्लास की जिम्मेदारियों का विश्लेषण कर सकता है, साझा बेस क्लास का सुझाव दे सकता है, डीप इनहेरिटेंस के बजाय इंटरफेस की सिफारिश कर सकता है और डुप्लिकेट कोड को चिह्नित कर सकता है।ping डेवलपर ऑब्जेक्ट-ओरिएंटेड डिज़ाइन सिद्धांतों का पालन करते हुए स्वच्छ, पुन: प्रयोज्य पदानुक्रम बनाते हैं।

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

इस पोस्ट को संक्षेप में इस प्रकार लिखें: