Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में इनहेरिटेंस बनाम Java में इनहेरिटेंस


C++ और Java में इनहेरिटेंस की अवधारणा है। इनहेरिटेंस गुणों का उपयोग कोड को पुन: उपयोग करने और दो ऑब्जेक्ट्स के बीच संबंध बनाने के लिए किया जाता है। यहां हम C++ में इनहेरिटेंस और Java में इनहेरिटेंस के बीच कुछ बुनियादी अंतर देखेंगे।

1. ऑब्जेक्ट क्लास रूट

Java में: सभी क्लासेस Object क्लास को एक्सटेंड करती हैं। इसलिए क्लासेस का हमेशा एक सिंगल इनहेरिटेंस ट्री होता है। Object क्लास ट्री की रूट पर मौजूद है।

// Java
public class MyClass { }
public class Test {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        System.out.println("obj Object का इंस्टेंस है: " + (obj instanceof Object)); // true
    }
}

C++ में: कोई सार्वभौमिक बेस क्लास नहीं है। क्लासेस स्वतंत्र हैं जब तक कि स्पष्ट रूप से इनहेरिट न किया जाए।


2. ग्रैंडपैरेंट मेंबर्स तक पहुंच

Java में: ग्रैंडपैरेंट क्लासेस के मेंबर्स को सीधे एक्सेस नहीं किया जा सकता।

C++ में: :: स्कोप रिज़ॉल्यूशन ऑपरेटर का उपयोग करके एक्सेस किया जा सकता है (यदि एक्सेस स्पेसिफायर अनुमति देता है)।


3. प्रोटेक्टेड विजिबिलिटी

Java में: बेस क्लास के प्रोटेक्टेड मेंबर्स उसी पैकेज की किसी अन्य क्लास से एक्सेसिबल हैं, भले ही वह क्लास बेस क्लास से डेराइव्ड न हो।

// Java - MyClass.java
public class MyClass {
    protected int x = 10;
    protected int y = 20;
}

// Java - Test.java (उसी पैकेज में, डेराइव्ड नहीं)
public class Test {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        System.out.println("x: " + obj.x + " y: " + obj.y); // एक्सेसिबल!
    }
}

C++ में: प्रोटेक्टेड मेंबर्स केवल डेराइव्ड क्लासेज और फ्रेंड्स द्वारा एक्सेसिबल हैं, पैकेज अवधारणा नहीं है।


4. इनहेरिटेंस कीवर्ड और विजिबिलिटी

  • Java: extends कीवर्ड का उपयोग करता है। इनहेरिटेंस की विजिबिलिटी नहीं बदल सकते - पब्लिक/प्रोटेक्टेड मेंबर्स डेराइव्ड में पब्लिक/प्रोटेक्टेड रहते हैं।
  • C++: public, protected, private इनहेरिटेंस निर्दिष्ट कर सकते हैं। यह बेस क्लास मेंबर्स की विजिबिलिटी को डेराइव्ड क्लास में प्रभावित करता है।
// C++
class Derived : public Base {    // पब्लिक इनहेरिटेंस
class Derived : protected Base { // प्रोटेक्टेड इनहेरिटेंस
class Derived : private Base {   // प्राइवेट इनहेरिटेंस
class Derived : Base {           // डिफ़ॉल्ट: प्राइवेट (क्लास), पब्लिक (स्ट्रक्चर)

5. वर्चुअल मेथड्स

  • Java: सभी नॉन-स्टेटिक, नॉन-फाइनल, नॉन-प्राइवेट मेथड्स डिफ़ॉल्ट रूप से वर्चुअल हैं।
  • C++: वर्चुअल व्यवहार के लिए स्पष्ट रूप से virtual कीवर्ड निर्दिष्ट करना होगा।

6. मल्टीपल इनहेरिटेंस

  • C++: डायरेक्ट मल्टीपल इनहेरिटेंस समर्थित है (डायमंड प्रॉब्लम संभव, वर्चुअल इनहेरिटेंस से हल)।
  • Java: क्लासेज के साथ डायरेक्ट मल्टीपल इनहेरिटेंस समर्थित नहीं। interface का उपयोग करके मल्टीपल इनहेरिटेंस का प्रभाव प्राप्त करें। इंटरफेसेस प्योरली एब्स्ट्रैक्ट बेस क्लास हैं जहां कोई फ़ंक्शन पूरा नहीं होता, इसलिए कोई अस्पष्टता नहीं होती।
// Java
interface A { void methodA(); }
interface B { void methodB(); }
class MyClass implements A, B { // मल्टीपल इंटरफेस इनहेरिटेंस
    public void methodA() { ... }
    public void methodB() { ... }
}

सारांश तालिका

पहलूC++Java
रूट क्लासकोई नहींjava.lang.Object
इनहेरिटेंस कीवर्डकोई नहीं (कोलन सिंटैक्स)extends
इनहेरिटेंस विजिबिलिटीpublic/protected/privateहमेशा पब्लिक (इफेक्टिवली)
डिफ़ॉल्ट वर्चुअलनहीं (explicit virtual)हां (नॉन-फाइनल मेथड्स)
मल्टीपल इनहेरिटेंसहां (क्लासेस)नहीं (केवल इंटरफेसेस)
पैकेज/नेमस्पेस प्रभावनहींप्रोटेक्टेड एक्सेस पर प्रभाव
कंस्ट्रक्टर चेनिंगइनिशियलाइज़र लिस्टsuper() कॉल
  1. C++ में मल्टीपल इनहेरिटेंस C++ में मल्टीपल इनहेरिटेंस

    मल्टीपल इनहेरिटेंस तब होता है जब कोई क्लास एक से अधिक बेस क्लास से इनहेरिट करती है। इसलिए क्लास मल्टीपल इनहेरिटेंस का उपयोग करके कई बेस क्लासेज से सुविधाएं इनहेरिट कर सकती है। यह C++ जैसी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं की एक महत्वपूर्ण विशेषता है। मल्टीपल इनहेरिटेंस को प्रदर्शित करने वाला एक

  1. - Java में Single Level Inheritance

    सिंगल लेवल इनहेरिटेंस - एक क्लास एक सिंगल क्लास से प्रॉपर्टीज इनहेरिट करती है। उदाहरण के लिए, क्लास B क्लास A को इनहेरिट करती है।उदाहरणclass Shape { public void display() { System.out.println(Inside display); } } class Rectangle extends Shape { public void area() {

  1. Java में इनहेरिटेंस के प्रकार Java में इनहेरिटेंस के प्रकार

    Java तीन प्रकार के इनहेरिटेंस का समर्थन करता है −सिंगल लेवल इनहेरिटेंस - एक क्लास एक सिंगल क्लास से प्रॉपर्टीज इनहेरिट करती है। उदाहरण के लिए, क्लास B क्लास A को इनहेरिट करती है।मल्टीलेवल इनहेरिटेंस - एक क्लास एक क्लास से प्रॉपर्टीज इनहेरिट करती है जिसने फिर से प्रॉपर्टीज इनहेरिट की हैंहायरार्किकल इ