दिलचस्प पोस्ट
वर्ग। के लिए कैसे काम करता है? MVC 6 बाइंड विशेषता गायब हो जाती है? कैसे एक स्थिर चर के लिए आवंटित स्मृति है? सीएसएस में "कैस्केडिंग" का क्या अर्थ है? AngularJS के साथ एक स्ट्रिंग की लंबाई को सीमित करें डिफ़ॉल्ट लॉक स्क्रीन पर एंड्रॉइड गतिविधि एक पथ / ट्रेल / चलना की परिभाषा पार्स तिथि स्ट्रिंग और परिवर्तन प्रारूप एनएटी ग्राफ पुस्तकालय के आसपास? प्रिंट स्टेटमेंट का उपयोग करते समय विशेष वर्ण प्रदर्शित करें Ifstream से पढ़ना श्वेत स्थान पढ़ा नहीं जाएगा maven-archetype-webapp eclipse समस्या अजगर पांडा: एक श्रृंखला के लिए तर्क के साथ एक फ़ंक्शन लागू करें पुरानी सीएसवी फ़ाइल अजगर के लिए नई पंक्ति जोड़ें फ़ायरफ़ॉक्स और क्रोम 48 में फ्लेक्सबॉक्स का इस्तेमाल करने वाली समस्याओं को प्रस्तुत करना

जावा और सुपरक्लासेस में विरासत (वस्तु, कक्षा)

क्या java.lang.Object superclass सभी कस्टम वर्ग / ऑब्जेक्ट्स को इनहेरिट की गई है? मैंने सोचा था कि जावा एकाधिक विरासत का समर्थन नहीं किया। मैं पूछ रहा हूँ कि अगर मैं पहले से ही अपने कस्टम वर्ग में दूसरे वर्ग से उत्तराधिकारी हूं और फिर जावा इसके शीर्ष पर java.lang.Object अंतर्निहित विरासत को मजबूर कर रहा है, क्या यह कई विरासत नहीं है?

इसके अलावा, java.lang.class भी सभी कस्टम वर्गों / ऑब्जेक्ट के लिए क्लास को सुपर क्लास भी है? यदि नहीं, तो कैसे जावा प्रतिबंधाओं में हम किसी भी वर्ग के लिए कक्षा का प्रकार प्राप्त कर सकते हैं या किसी भी ऑब्जेक्ट पर कॉल कर सकते हैं?

वेब के समाधान से एकत्रित समाधान "जावा और सुपरक्लासेस में विरासत (वस्तु, कक्षा)"

सब कुछ एक वस्तु है, जिसने कहा था कि आप संरचना को इस रूप में देख सकते हैं:

 Object Animal Cat 

और ये नहीं:

 Object Animal Cat 

जहां काट दोनों का विस्तार होता है, यह इस आखिरी उदाहरण की तरह नहीं है, लेकिन यह Cat है जो कि Object extends

एक स्पष्ट superclass बिना हर वर्ग java.lang.Object से विरासत में मिली है और हर दूसरे वर्ग परोक्ष रूप से इसे से विरासत में मिला क्योंकि जब आप विरासत के पेड़ ऊपर जाना है, आप अंत में एक स्पष्ट superclass के बिना एक कक्षा में खत्म हो जाएगा और फिर Object

java.lang.Class सभी वर्ग वस्तुओं (सभी वस्तुओं की नहीं!) का सुपर वर्ग है, उदाहरण के लिए String.class

क्या java.lang.Object superclass सभी कस्टम वर्ग / ऑब्जेक्ट्स को इनहेरिट की गई है?

मामूली सुधार: निम्नलिखित अभिव्यक्ति के बारे में:

सभी custom class/objects सुपर क्लास

एक कक्षा दूसरे वर्ग बी का एक सुपर वर्ग है ऑब्जेक्ट या बी के ऑब्जेक्ट या उदाहरण के पास उनके सुपर क्लास के रूप में नहीं है (चूंकि वे ऑब्जेक्ट्स / ऑब्जेक्ट इन्सटेंसेस हैं, न कि खुद कक्षाएं।) सबसे उपयुक्त विवरण यह है कि ये ऑब्जेक्ट क्लास बी के उदाहरण हैं, जो कि को सुपरक्लास के रूप में है

अब, java.lang.Object पर आपके प्रश्न पर। यह सब कुछ के सुपर वर्ग है जिसे जावा रनटाइम के द्वारा शुरू किया जा सकता है इसमें दोनों शामिल हैं:

  1. जो वर्ग आप लिखते हैं (कस्टम वर्ग), साथ ही साथ
  2. जावा भाषा के द्वारा प्रदान की जाने वाली कक्षाएं

मैंने सोचा था कि जावा एकाधिक विरासत का समर्थन नहीं किया।

यह नहीं है यह केवल एकल class (या implementation ) विरासत (एकाधिक interface (या type ) विरासत के साथ संयोजन में सहायता करता interface

आप वर्ग पदानुक्रम के साथ भ्रामक विरासत है Pls नीचे और नीचे देखें

मैं पूछ रहा हूँ कि अगर मैं पहले से ही अपने कस्टम वर्ग में दूसरे वर्ग से उत्तराधिकारी हूं और फिर जावा इसके शीर्ष पर जावा.लैंग। ऑब्जेक्ट के अंतर्निहित विरासत को मजबूर कर रहा है,

और वह कई विरासत के साथ ठीक है कहें कि आपके पास कक्षा बी है जिसे आपने पहले से जावा द्वारा प्रदान की गई कक्षा (ए कक्षा ए) से विरासत में लिखा है। तो इस प्रकार एक रैखिक, पारस्परिक संबंध है:

 java.lang.Object > A > B 

कहां > immediate parent of के लिए खड़ा है ऑब्जेक्ट से विरासत में मिली कोई वर्ग केवल एक और केवल एक immediate parent । किसी भी बिंदु पर आपके पास एक कक्षा C होगा जिसके लिए निम्नलिखित दो वर्गों ए और बी के लिए कोई प्रतिबंध नहीं है:

सभी ए, बी {ए> बी -> के लिए सभी सी {सी> बी <-> सी == ए}}

सभी वर्गों ए और बी के लिए, जैसे ए बी के immediate parent है, फिर सभी वर्गों सी के लिए, सी केवल बी * का एक immediate parent हो सकता है, और केवल अगर सी खुद ही ए है।

एक विरासत के साथ आप (सैद्धांतिक रूप से) एक अनन्त विरासत श्रृंखला A > B > C > ... हो सकता है जब तक कि श्रृंखला में हर वर्ग one and only one तत्काल माता-पिता से आगे बढ़ जाता है। एक उपयोगी सादृश्य के रूप में, यह प्राकृतिक संख्याओं में predecessor संबंधों जैसा दिखता है ( 0 preceedes 1 preceedes 2 which preceedes 3 ... )।

अस्वीकरण : यह वह चीज नहीं है जो आप दिन-प्रतिदिन प्रोग्रामिंग जीवन गतिविधियों में उपयोग करते हैं। हालांकि, हुड के नीचे इन चीजों का क्या मतलब है, यह ठीक से जानने के लिए ऑब्जेक्ट ओरिएंटेशन के माध्यम से आपको काफी मदद मिलेगी।

क्या यह कई विरासत नहीं है?

नहीं (ऊपर देखें।) एकल विरासत का विरोध – जैसा कि ऊपर समझाया गया है – एकाधिक विरासत में आप एक से अधिक तत्काल माता-पिता हो सकते हैं (जैसा कि सी ++ में देखा गया है)।

जैसा कि हमने उपर्युक्त परिभाषाओं में देखा, पारगमन विरासत संबंध '' 'एक वर्ग से दूसरे में है। लेकिन कई विरासत के साथ, संबंध एक सुपरक्लस {A} से एक वर्ग {B} :

  {A} > B -> forAll a {a in A <-> a > B} 

और सी ++ में जहां माता-पिता के बिना कक्षाएं हो सकती हैं, तो सेट {A} शून्य सेट हो सकता है। जावा में, आपके पास बहुत से विरासत हैं, लेकिन interfaces (या प्रकार) तक सीमित हैं।

इसके अलावा, java.lang.class भी सभी कस्टम वर्गों / ऑब्जेक्ट के लिए क्लास को सुपर क्लास भी है?

नहीं, यह आपके सीखने में मदद करेगा यदि आप जावडॉक मैनुअल जो कि ऑनलाइन उपलब्ध हैं, की एक यात्रा करते हैं। इसे देखो। वास्तव में।

यदि नहीं, तो कैसे जावा प्रतिबंधाओं में हम किसी भी वर्ग के लिए कक्षा का प्रकार प्राप्त कर सकते हैं या किसी भी ऑब्जेक्ट पर कॉल कर सकते हैं?

क्योंकि java.lang.Class (और java reflections द्वारा उपयोग किए जाने वाले सभी वर्ग) के उदाहरण अन्य वर्गों के लिए मेटा-डेटा विवरणक हैं। यह विरासत के साथ कुछ नहीं करना है आप यहाँ क्या बात कर रहे हैं meta-programming रूप में जाना जाता है

इसके अलावा, java.lang.Class एक अंतिम वर्ग है; इसलिए, यह कुछ भी नहीं है।

Java.lang.Class का कार्य सभी उदाहरणों और java.lang.Object (उपरोक्त java.lang.Class सहित) के उप-वर्गों के लिए मेटा-डाटा प्रदाता / विवरणक होना है। प्रत्येक कक्षा (। String.class) एक स्थिर, कक्षा-स्तर उस क्लास से संबंधित मेटा-डेटा का वर्णन करने वाला क्षेत्र है।

Java.lang.Class द्वारा निहित / वर्णित मेटा-डेटा में विधियों, कन्स्ट्रक्टरों और क्षेत्रों के लिए मेटा-डेटा एक्सेसर ऑब्जेक्ट शामिल हैं। फिर, यह विरासत के साथ कुछ नहीं करना है

विरासत = / = मेटा-प्रोग्रामिंग

आशा करता हूँ की ये काम करेगा।

एकाधिक विरासत का मतलब है कि एक वर्ग में कई प्रत्यक्ष पूर्ववर्तियों हैं अगर ए बी से विरासत में मिली है, और बी सी से निकलता है, तो यह एकाधिक विरासत नहीं है।

मुझे दूसरे प्रश्न ("java.lang.class class") नहीं समझता; आप स्पष्ट कर सकते हैं कि यह स्पष्ट करना है।

Object हर दूसरे क्लास का सुपर क्लास है जब आपका Child वर्ग आपके Parent वर्ग से निकलता है, तो वह Object का बच्चा नहीं है, लेकिन यह अभी भी एक वंश है, क्योंकि उसके माता पिता Object वंश है। इसलिए यदि आप सुपरक्लास / माता-पिता निर्दिष्ट नहीं करते हैं, तो यह स्वचालित रूप से ऑब्जेक्ट होगा। यदि आप एक अभिभावक निर्दिष्ट करते हैं, तो Object अभी भी एक सुपरक्लास होगा, क्योंकि यह परिभाषा के आधार पर पैरेंट क्लास का एक सुपर क्लास है।

Class प्रत्येक कक्षा का एक सुपर वर्ग नहीं है, लेकिन Object क्लास में प्रत्येक वर्ग की Class को मिलते हैं क्लास को मिलते हैं getClass विधि के साथ।

कस्टम वर्ग जिसे आप खुद से प्राप्त करते हैं, वह सीधे या Object से निहित हैं, इसलिए आप अप्रत्यक्ष रूप से ऑब्जेक्ट से प्राप्त करते हैं। श्रृंखला YourObject -> MiddleObject -> java.lang.Object जाता है। कोई बहुमूल्य विरासत आवश्यक नहीं है

एकाधिक वंशानुक्रम तब होता है जब आप सीधे दो असंबद्ध वर्गों से प्राप्त करते हैं। उदाहरण के लिए, यदि आपके पास एक क्लास PoliceDog जो सीधे Canine और PoliceOfficer दोनों से प्राप्त करता है, तो यह कई वारिस होगा

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