inheritance एक ऐसा तंत्र है। जिसमे एक class की properties और methods को किसी दुसरे class में उपयोग किया जा सकता है | अर्थात child class अपने parent class के properties और methods को inherit करती है। parent class को base class , super class और child class को sub class , derived class भी कहा जाता है।inheritance IS-A relationship को represent करता है जिसे parent-child relationship भी कहा जाता है।
जावा में वंशानुक्रम एक ऐसा तंत्र है जिसमें एक वस्तु एक मूल वस्तु के सभी गुणों और व्यवहारों को प्राप्त कर लेती है। यह OOPs (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग सिस्टम) का एक महत्वपूर्ण हिस्सा है। जावा में विरासत के पीछे का विचार यह है कि आप नए वर्ग बना सकते हैं जो मौजूदा वर्गों पर बनाए गए हैं। जब आप किसी मौजूदा वर्ग से इनहेरिट करते हैं, तो आप मूल वर्ग के तरीकों और क्षेत्रों का पुन: उपयोग कर सकते हैं। इसके अलावा, आप अपनी वर्तमान कक्षा में भी नई विधियों और क्षेत्रों को जोड़ सकते हैं। वंशानुक्रम IS-A संबंध का प्रतिनिधित्व करता है जिसे माता-पिता-बच्चे के संबंध के रूप में भी जाना जाता है।
इनहेरिटेंस का शब्दशः मतलब होता हैं विरासत। लेकिन प्रोग्रामिंग में इसका मतलब है, दुसरे क्लास के प्रॉपर्टीज को आत्मसात कर, उनका इस्तेमाल करना। जिसके चलते प्रोग्रामर को कोड बार बार लिखना नहीं पड़ता। इनहेरिटेंस, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का एक महत्वपूर्ण पहलु हैं, जो पुनर्वापर (री-यूजाबिलिटी) मुहैय्या कराता हैं। यह एक प्रक्रिया जिसके जरिए एक क्लास का ऑब्जेक्ट दुसरे क्लास की प्रॉपर्टीज को अंगीकृत कर सकता हैं। जिस क्लास के गुणधर्म दूसरा क्लास इन्हेरिट करेगा, उसे बेस क्लास या सुपर क्लास कहा जाता हैं। और जो क्लास बेस क्लास की प्रॉपर्टीज इन्हेरिट करता हैं उसे डेराइव्हड क्लास या सब क्लास कहा जाता हैं। जावा प्रोग्रामिंग में एक क्लास के प्रॉपर्टीज दुसरे में इन्हेरिट करने हेतु extend इस कीवर्ड का इस्तेमाल किया जाता हैं।
मेथड ओवरराइडिंग के लिए (इसलिए रनटाइम पॉलीमॉर्फिज्म हासिल किया जा सकता है)।
कोड पुन: प्रयोज्य के लिए।
वर्ग: एक वर्ग वस्तुओं का एक समूह है जिसमें सामान्य गुण होते हैं। यह एक टेम्प्लेट या ब्लूप्रिंट है जिससे ऑब्जेक्ट बनाए जाते हैं।
उप वर्ग/बाल वर्ग: उपवर्ग एक ऐसा वर्ग है जो दूसरे वर्ग को विरासत में मिला है। इसे व्युत्पन्न वर्ग, विस्तारित वर्ग या बाल वर्ग भी कहा जाता है।
सुपर क्लास / पैरेंट क्लास: सुपरक्लास वह क्लास है जहाँ से एक सबक्लास को सुविधाएँ विरासत में मिलती हैं। इसे बेस क्लास या पैरेंट क्लास भी कहा जाता है।
पुन: प्रयोज्य: जैसा कि नाम निर्दिष्ट करता है, पुन: प्रयोज्य एक तंत्र है जो आपको एक नया वर्ग बनाते समय मौजूदा वर्ग के क्षेत्रों और विधियों का पुन: उपयोग करने की सुविधा देता है। आप उन्हीं फ़ील्ड्स और विधियों का उपयोग कर सकते हैं जो पिछली कक्षा में पहले से ही परिभाषित हैं।
वंशानुक्रम OOP (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) का एक महत्वपूर्ण स्तंभ है। यह जावा में तंत्र है जिसके द्वारा एक वर्ग को दूसरे वर्ग की विशेषताओं (क्षेत्रों और विधियों) को विरासत में लेने की अनुमति है।
जब एक वर्ग घोषित किया जाता है, इसके विनिर्देश के साथ, और अन्य उप-वर्ग सदस्य इसके सदस्य विधियों (कार्यों) का उपयोग करना चाहेंगे; वह तब होगा जब वे विरासत की अवधारणाओं के लिए जाएंगे। जावा प्रोग्रामिंग में विरासत अवधारणाएं हर जगह हैं।
class Subclass-name extends Superclass-name { //methods and fields }
विस्तारित कीवर्ड इंगित करता है कि आप एक नया वर्ग बना रहे हैं जो मौजूदा वर्ग से निकला है। "विस्तारित" का अर्थ कार्यक्षमता को बढ़ाना है। जावा की शब्दावली में, एक वर्ग जो विरासत में मिला है उसे माता-पिता या सुपरक्लास कहा जाता है, और नए वर्ग को बच्चा या उपवर्ग कहा जाता है।
जावा परिभाषा में विरासत: जावा में वंशानुक्रम एक अवधारणा है जो एक वर्ग से दूसरे वर्ग में गुण प्राप्त करती है; उदाहरण के लिए, पिता और पुत्र के बीच संबंध। जावा में, एक वर्ग दूसरे वर्ग से विशेषताओं और विधियों को प्राप्त कर सकता है। जिस वर्ग को गुण विरासत में मिलते हैं उसे उप-वर्ग या बाल वर्ग के रूप में जाना जाता है। जिस वर्ग से गुण विरासत में मिले हैं उसे सुपरक्लास या मूल वर्ग के रूप में जाना जाता है। वंशानुक्रम में, आधार वर्ग के गुण व्युत्पन्न वर्गों द्वारा अधिग्रहित किए जाते हैं।
वर्ग के आधार पर जावा में तीन प्रकार के वंशानुक्रम हो सकते हैं: एकल, बहुस्तरीय और श्रेणीबद्ध। जावा प्रोग्रामिंग में, मल्टीपल और हाइब्रिड इनहेरिटेंस केवल इंटरफेस के माध्यम से समर्थित है। हम इंटरफेस के बारे में बाद में सीखेंगे।
जब एक वर्ग को कई वर्ग विरासत में मिलते हैं, तो इसे एकाधिक वंशानुक्रम के रूप में जाना जाता है। उदाहरण के लिए:
जब एक वर्ग दूसरे वर्ग को विरासत में लेता है, तो इसे एकल वंशानुक्रम के रूप में जाना जाता है। नीचे दिए गए उदाहरण में, डॉग क्लास को एनिमल क्लास इनहेरिट करती है, इसलिए सिंगल इनहेरिटेंस है।
class Animal{ void eat(){System.out.println("eating...");} } class Dog extends Animal{ void bark(){System.out.println("barking...");} } class TestInheritance{ public static void main(String args[]){ Dog d=new Dog(); d.bark(); d.eat(); }}
barking... eating...
जब विरासत की एक श्रृंखला होती है, तो इसे बहुस्तरीय विरासत के रूप में जाना जाता है। जैसा कि आप नीचे दिए गए उदाहरण में देख सकते हैं, बेबीडॉग वर्ग डॉग क्लास को इनहेरिट करता है जो फिर से एनिमल क्लास को इनहेरिट करता है, इसलिए एक मल्टीलेवल इनहेरिटेंस है।
class Animal{ void eat(){System.out.println("eating...");} } class Dog extends Animal{ void bark(){System.out.println("barking...");} } class BabyDog extends Dog{ void weep(){System.out.println("weeping...");} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }}
weeping... barking... eating...
जब दो या दो से अधिक वर्गों को एक ही वर्ग विरासत में मिलता है, तो इसे पदानुक्रमित वंशानुक्रम के रूप में जाना जाता है। नीचे दिए गए उदाहरण में, डॉग और कैट क्लास को एनिमल क्लास इनहेरिट करती है, इसलिए पदानुक्रमित इनहेरिटेंस है।
class Animal{ void eat(){System.out.println("eating...");} } class Dog extends Animal{ void bark(){System.out.println("barking...");} } class Cat extends Animal{ void meow(){System.out.println("meowing...");} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }}
meowing... eating...