/ / क्या इसके सुपर क्लास की एक वस्तु का विस्तार होगा? - जावा

अपने सुपर क्लास का ऑब्जेक्ट बनाना बढ़ाएगा। - जावा

मैं इस सरल प्रश्न से भ्रमित हूं। क्या कोई मान्य उत्तर के साथ मेरी मदद कर सकता है।

 public class SuperClass{
public SuperClass(){
// may or may not have a constructor for superclass
}
}
public class SubClass extends SuperClass{
// anything here
public static void main(String args[])
{
SubClass sub=new SubClass();
}
}

अब मेरा सवाल है कि क्या मैं एक वस्तु बना रहा हूं SubClass कर देता है यह एक बनाएँ वस्तु का SuperClass यदि हाँ तो क्यों .. ??

मैं जानता हूं कि ज्यादातर लोग इस सवाल को मूर्खतापूर्ण तरीके से देखते हैं। लेकिन ये मेरे सवाल हैं।

यह सुपरक्लास के निर्माता को बुलाता है तो यदि कोई वस्तु नहीं बनाई जाती है तो यह कैसे करता है?

क्या विस्तार से वर्ग का आकार बढ़ता है? यानी सुपरक्लास + सबक्लास। !!

उत्तर:

उत्तर № 1 के लिए 1

अब मेरा सवाल यह है कि अगर मैं SubClass का ऑब्जेक्ट बना रहा हूँ तो क्या यह SuperClass का ऑब्जेक्ट बनाता है यदि हाँ तो क्यों .. ??

नहीं यह नहीं।

जब तुम करोगे

SubClass sub=new SubClass();

केवल SubClass ऑब्जेक्ट बनाया गया। और केवल निर्माता का सुपर क्लास कॉल। और यह कि सुपर क्लास कंस्ट्रक्टर को कॉल करने से उन तक पहुँच नहीं बनी java.lang.Object निर्माता।

पक्षीय लेख: नियम का एक अंग (डॉन "नहीं जानता कि यह आधिकारिक है या नहीं," प्रत्येक के साथ नया , केवल एक वस्तु बनाता है)

आप देखें:15.9.4 क्लास इंस्टेंस क्रिएशन एक्सप्रेशन का रन-टाइम मूल्यांकन

नई वस्तु में सभी के नए उदाहरण हैंनिर्दिष्ट वर्ग प्रकार और उसके सभी सुपरक्लेसेस में घोषित क्षेत्र। जैसा कि प्रत्येक नए फ़ील्ड उदाहरण को बनाया जाता है, इसे इसके डिफ़ॉल्ट मान (.54.12.5) से आरंभ किया जाता है।

तो आप इस तरह के निष्कर्ष पर आ सकते हैं class SubClass extends SuperClass, तब विधियाँ, चर वर्ग की नकल की जाती हैं SubClass .

संपादित करें:

अगर कोई ऑब्जेक्ट नहीं बनाया जाता है तो एक निर्माता को कैसे बुलाया जा सकता है .. ??

आह ... तुम्हारा शक मेरे लिए समझ में आ रहा है।

परंतु constructor जावा में बहुत विशेष विधि है। आप एक क्लास फाइल को डिकंपाइल कर सकते हैं, आप कंस्ट्रक्टर्स को उसके नाम पर देख सकते हैं <init>. आप फोन नहीं कर सकते स्पष्ट रूप से सिवाय कीवर्ड के new या super.


उत्तर № 2 के लिए 1

यह एक सरल हां / ना में जवाब देना कठिन है क्योंकि यह आपके द्वारा उपयोग किए जा रहे शब्दों की सटीक परिभाषा पर निर्भर करता है। जब आप कहें

SubClass sub = new SubClass();

यह पैदा करेगा एक ऑब्जेक्ट (कंस्ट्रक्टर बॉडी द्वारा बनाए गए किसी भी अन्य ऑब्जेक्ट की गणना नहीं करना या सदस्य क्षेत्रों की आरंभीकरण)। वस्तु एक है रनटाइम क्लास, कोनसा होगा SubClass। अगर आप कहते हैं sub.getClass() == SubClass.class, यह रिटर्न true। अगर आप कहते हैं sub.getClass() == SuperClass.class, यह रिटर्न false। तो उस अर्थ में, उत्तर नहीं है, क्योंकि ऑब्जेक्ट (रनटाइम) वर्ग है SubClass, नहीं SuperClass.

हालाँकि, नया SubClass ऑब्जेक्ट को "उदाहरण" के रूप में भी माना जाता है SuperClass; अगर आप कहते हैं sub instanceof SuperClass, यह अभिव्यक्ति है true। आप भी उपयोग कर सकते हैं sub कहीं भी SuperClass की जरूरत है, उदा। यदि आपके पास एक चर है SuperClass s आप असाइन कर सकते हैं s = sub, और अगर एक विधि की जरूरत है एक SuperClass पैरामीटर, आप पास कर सकते हैं sub यह करने के लिए। OOP में, उत्तराधिकार (extends जावा में) एक को दर्शाता है एक है संबंध, और इस अर्थ में, ए SubClass एक है SuperClass, और इसीलिए sub भी एक है SuperClass। लेकिन ध्यान दें कि इसकी रनटाइम क्लास कभी नहीँ परिवर्तन।

SuperClass s = sub;
boolean b1 = (s.getClass() == SuperClass.class);  // false
boolean b2 = (s.getClass() == SubClass.class);    // true

बेशक, सटीक प्रश्न का उत्तर देने के लिए "क्या यह सुपरक्लास की वस्तु बनाता है", इसका उत्तर हां हो सकता है यदि निर्माणकर्ता दिखता है

public SubClass () {
this.myParent = new SuperClass();
}

अब निर्माणकर्ता एक वस्तु बनाता है SubClass और की एक अलग वस्तु SuperClass। लेकिन मुझे यकीन है कि आपका मतलब नहीं है। :)

संपादित करें: आपके द्वारा बाद में जोड़े गए प्रश्नों को संबोधित करने के लिए:

यह सुपरक्लास के निर्माता को बुलाता है तो यदि कोई वस्तु नहीं बनाई जाती है तो यह कैसे करता है?

The SubClass ऑब्जेक्ट में सदस्य क्षेत्र शामिल हैं जो घोषित किए गए हैं SuperClass, प्लस सदस्य क्षेत्रों के लिए घोषित SubClass. (प्लस सदस्य क्षेत्रों के लिए घोषित Object और बीच में किसी भी अन्य सुपरक्लास.) लेकिन यह "अभी भी सिर्फ एक उन सभी क्षेत्रों युक्त वस्तु है ।के SubClass कंस्ट्रक्टर कॉल करता है SuperClass कंस्ट्रक्टर, जो (शायद) के लिए घोषित क्षेत्रों को शुरू करता है SuperClass; तब SubClass कंस्ट्रक्टर के लिए घोषित क्षेत्रों को शुरू कर सकते हैं SubClass.

क्या विस्तार वर्ग के आकार में वृद्धि करता है? यानी सुपरक्लास SubClass.!!

यदि नए सदस्य क्षेत्रों में घोषित कर रहे है SubClass, तो हां, एक SubClass संभवतः अधिक स्मृति का उपयोग करता है, क्योंकि यह सभी क्षेत्रों में घोषित किया गया है SuperClass साथ ही सभी क्षेत्रों में घोषित SubClass.


जवाब के लिए 0 № 3

आपका प्रश्न थोड़ा भ्रामक है। - आप सुपरक्लास ऑब्जेक्ट नहीं बनाते क्योंकि एकमात्र निर्मित ऑब्जेक्ट एक उपवर्ग वस्तु है।- एक अन्य परिप्रेक्ष्य में, हां, आप सुपरक्लास ऑब्जेक्ट बनाते हैं क्योंकि एक सबक्लास ऑब्जेक्ट सुपरक्लास ऑब्जेक्ट है।दूसरे शब्दों में, "सुपरक्लास ओजे = नई उपवर्ग ();" पूरी तरह से मान्य है - सुपरक्लास "एस कंस्ट्रक्टर कहा जाता है


जवाब के लिए 0 № 4

नहीं, यह सुपरक्लास ऑब्जेक्ट नहीं बनाता है । हालांकि यह सुपरक्लास से विरासत में मिलता है, यह अपने कंस्ट्रक्टर और intialisation ब्लॉकों (यदि कोई हो) चलाता है, और यह भी अपने राज्य और व्यवहार हो जाता है ।