विरासत Java (उदाहरण सहित)
विरासत क्या है?
विरासत एक तंत्र है जिसमें एक वर्ग दूसरे वर्ग की संपत्ति प्राप्त करता है। उदाहरण के लिए, एक बच्चा अपने माता-पिता के गुणों को विरासत में प्राप्त करता है। विरासत के साथ, हम मौजूदा वर्ग के फ़ील्ड और विधियों का पुनः उपयोग कर सकते हैं। इसलिए, विरासत पुन: प्रयोज्यता की सुविधा प्रदान करती है और यह OOPs की एक महत्वपूर्ण अवधारणा है।
उत्तराधिकार क्या है? Java?
Java विरासत एक तंत्र है जिसमें एक वर्ग दूसरे वर्ग की संपत्ति अर्जित करता है। Javaजब दो क्लास के बीच “Is-A” संबंध होता है, तो हम इनहेरिटेंस का उपयोग करते हैं। पैरेंट क्लास को सुपर क्लास कहा जाता है और इनहेरिटेड क्लास को सबक्लास कहा जाता है। कीवर्ड extends उपवर्ग द्वारा सुपरक्लास की विशेषताओं को इनहेरिट करने के लिए उपयोग किया जाता है। इनहेरिटेंस महत्वपूर्ण है क्योंकि यह कोड की पुनः प्रयोज्यता की ओर ले जाता है।
Java वंशानुक्रम वाक्यविन्यास:
class subClass extends superClass
{
//methods and fields
}
वंशानुक्रम के प्रकार Java
यहाँ विभिन्न प्रकार की विरासत दी गई है Java:
- एकल वंशानुक्रम
- एकाधिक वंशानुक्रम
- मल्टीलेवल इनहेरिटेंस
- पदानुक्रमित वंशानुक्रम
- संकर वंशानुक्रम
1. एकल उत्तराधिकार:
एकल वंशानुक्रम में एक वर्ग दूसरे वर्ग (केवल एक वर्ग) का विस्तार करता है।

उपरोक्त चित्र में, वर्ग B केवल वर्ग A का विस्तार करता है। वर्ग A एक सुपर क्लास है और वर्ग B एक उप-वर्ग है।
2. बहुविध वंशानुक्रम:
बहुविध वंशानुक्रम एक प्रकार का वंशानुक्रम है। Java प्रकार जहां एक वर्ग एक से अधिक वर्गों का विस्तार करता है। Java एकाधिक विरासत का समर्थन नहीं करता है.

उपरोक्त चित्र के अनुसार, वर्ग C, वर्ग A और वर्ग B दोनों का विस्तार करता है।
3. बहुस्तरीय विरासत:
मल्टीलेवल इनहेरिटेंस में, एक क्लास एक व्युत्पन्न क्लास से इनहेरिट कर सकता है। इसलिए, व्युत्पन्न क्लास नए क्लास के लिए आधार क्लास बन जाता है।

चित्र में दिखाए अनुसार वर्ग C, वर्ग B का उपवर्ग है तथा B, वर्ग A का उपवर्ग है।
4. पदानुक्रमिक विरासत:
पदानुक्रमिक वंशानुक्रम में, एक वर्ग को कई उपवर्गों द्वारा विरासत में प्राप्त किया जाता है।

उपरोक्त उदाहरण के अनुसार, वर्ग B, C और D को समान वर्ग A विरासत में मिलता है।
5. संकर वंशानुक्रम:
हाइब्रिड वंशानुक्रम वंशानुक्रम के प्रकारों में से एक है Java जो एकल और बहुविध वंशानुक्रम का संयोजन है।
उपरोक्त उदाहरण के अनुसार, वर्ग A के सभी सार्वजनिक और संरक्षित सदस्य वर्ग D में स्थानांतरित होते हैं, पहले वर्ग B के माध्यम से और फिर वर्ग C के माध्यम से।
नोट: 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 के दृष्टिकोण का उपयोग करते हुए, आपको केवल एक नया क्लास लिखना होगा जिसमें विड्रॉ फ़ंक्शन का अद्वितीय कार्यान्वयन हो। हमने कोड के परीक्षण किए गए भाग को कभी नहीं छुआ।
एक और परिवर्तन अनुरोध
अगर आवश्यकता में और बदलाव होता है तो क्या होगा? जमाराशि की अपनी अनूठी आवश्यकता के साथ क्रेडिट कार्ड खाता जोड़ना पसंद करें.
संरचनात्मक दृष्टिकोण: संरचनात्मक दृष्टिकोण का उपयोग करते हुए आपको जमा कोड के परीक्षण किए गए भाग को फिर से बदलना होगा।
ओ.ओ.पी. का दृष्टिकोण: लेकिन ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण का उपयोग करके, आप केवल डिपॉजिट विधि के अपने अनूठे कार्यान्वयन के साथ एक नया वर्ग बनाएंगे (नीचे की छवि में लाल रंग से हाइलाइट किया गया है)। इसलिए भले ही संरचनात्मक प्रोग्रामिंग शुरू में एक आसान दृष्टिकोण की तरह लगता है, लेकिन OOP लंबे समय में जीतता है।
OOPs में वंशानुक्रम के लाभ
लेकिन कोई यह तर्क दे सकता है कि सभी वर्गों में, आपके पास कोड के दोहराए गए टुकड़े हैं।
इस पर काबू पाने के लिए, आप एक पैरेंट क्लास बनाते हैं, जैसे कि "अकाउंट" और जमा और निकासी के समान फ़ंक्शन को लागू करते हैं। और चाइल्ड क्लास को "अकाउंट" क्लास विरासत में देते हैं। ताकि उन्हें अकाउंट क्लास में निकासी और जमा फ़ंक्शन तक पहुँच मिल सके। फ़ंक्शन को अलग-अलग लागू करने की आवश्यकता नहीं है। यह है जावा में विरासत. .











