2013-03-04 5 views
20

में मैं कुछ कोड के माध्यम से पढ़ रहा हूं। कन्स्ट्रक्टर में इसमें सुपर() है लेकिन कक्षा इंटरफ़ेस लागू करती है जिसमें निश्चित रूप से कोई कन्स्ट्रक्टर नहीं होता है। तो कौन सा सुपर() इसका जिक्र कर रहा है?सुपर() कन्स्ट्रक्टर

public class BoundingBox implements IBoundingVolume { 

public BoundingBox() { 
     super(); 
     mTransformedMin = new Number3D(); 
     mTransformedMax = new Number3D(); 
     mTmpMin = new Number3D(); 
     mTmpMax = new Number3D(); 
     mPoints = new Number3D[8]; 
     mTmp = new Number3D[8]; 
     mMin = new Number3D(); 
     mMax = new Number3D(); 
     for(int i=0; i<8; ++i) { 
      mPoints[i] = new Number3D(); 
      mTmp[i] = new Number3D(); 
     } 
} 


public interface IBoundingVolume { 
    public void calculateBounds(Geometry3D geometry); 
    public void drawBoundingVolume(Camera camera, float[] projMatrix, float[] vMatrix, float[] mMatrix); 
    public void transform(float[] matrix); 
    public boolean intersectsWith(IBoundingVolume boundingVolume); 
    public BaseObject3D getVisual(); 
} 
+1

यह सुपर क्लास के निर्माता के लिए बुला रहा है। इस मामले में - वस्तु। – user

+3

यह ऑब्जेक्ट क्लास को संदर्भित करता है। –

+0

यह मुझे लगता है java.lang.Object कंस्ट्रक्टर कहते हैं। –

उत्तर

34

super() विस्तारित class (नहीं एक कार्यान्वित इंटरफेस) को दर्शाता है। जो इस मामले में है Object

तो यह (जो कुछ नहीं करता है) Object में निर्माता कॉल करेंगे

+1

जावा में सभी वर्ग ऑब्जेक्ट से व्युत्पन्न होते हैं, जब तक वे किसी अन्य वर्ग से प्राप्त नहीं होते हैं। इसलिए, सुपर() ऑब्जेक्ट क्लास के निर्माता को संदर्भित करता है। –

+1

वास्तव में * सभी * जावा कक्षाएं ऑब्जेक्ट से ली गई हैं। यदि वे एक और वर्ग का विस्तार करते हैं तो इसका मतलब है कि उनके पास एक बड़ा पदानुक्रम है। – cowls

+0

हम्म, कोई ऑब्जेक्ट() के कन्स्ट्रक्टर का संदर्भ क्यों देगा? अगर मैं सुपर() के साथ इस लाइन को हटा देता हूं तो इसका कोई प्रभाव नहीं पड़ेगा? – Nazerke

1

super विस्तारित वर्ग के निर्माता कहते हैं। जावा में सभी कक्षाएं Object से प्राप्त हुई हैं। इसके अतिरिक्त, यदि कक्षा के लेखक वर्ग के लिए कोई कन्स्ट्रक्टर नहीं बनाते हैं, तो एक डिफ़ॉल्ट कन्स्ट्रक्टर बनाया जाता है जो कुछ भी नहीं करता है।

आपके मामले में, superObject के डिफ़ॉल्ट निर्माता को कॉल कर रहा है।

यदि आप Object के बारे में अधिक जानना चाहते हैं, तो आप Object.javahere के स्रोत कोड को पढ़ सकते हैं।

13

सुपर विस्तारित कक्षा का संदर्भ दे रहा है। डिफ़ॉल्ट रूप से यह ऑब्जेक्ट क्लास है। ऑब्जेक्ट में कन्स्ट्रक्टर कुछ भी नहीं करता है। दूसरे शब्दों में आप इस लाइन को हटा सकते हैं क्योंकि यह आवश्यक नहीं है।

यह भी ध्यान रखें ओरेकल इस विषय के बारे में क्या कह रहा है करें: एक निर्माता स्पष्ट रूप से एक सुपर क्लास निर्माता आह्वान नहीं करता

हैं, जावा स्वचालित रूप से सुपर क्लास का कोई तर्क निर्माता के लिए एक कॉल डाल देता है। यदि सुपर क्लास में कोई तर्क-तर्क कन्स्ट्रक्टर नहीं है, तो आपको संकलन-समय त्रुटि मिल जाएगी। ऑब्जेक्ट में ऐसा कन्स्ट्रक्टर होता है, इसलिए यदि ऑब्जेक्ट एकमात्र सुपरक्लास है, तो कोई समस्या नहीं है।

स्रोत: http://docs.oracle.com/javase/tutorial/java/IandI/super.html

संबंधित मुद्दे