मैं जावा में निम्न उदाहरण श्रेणियां होती हैं:सुपरटेप कन्स्ट्रक्टर को सीधे कॉल नहीं कर सकता - क्यों नहीं?
public class A { }
public class Super {
protected Super() { }
public Super(A a) { }
}
public class Sub extends Super { }
public class Consumer {
public Consumer() {
Sub sub = new Sub(new A()); //compiler error
}
}
संकलक त्रुटि कहा गया है कि बहस उप में डिफ़ॉल्ट निर्माता है, जो पूरी तरह से समझा जा सकता है के लिए लागू नहीं किया जा सकता।
जो मैं इस बारे में उत्सुक हूं, इस निर्णय के पीछे तर्क है। जावा Sub
में डिफ़ॉल्ट खाली कन्स्ट्रक्टर उत्पन्न करता है; इस मामले में इसे दृश्यों के पीछे क्यों नहीं बुलाया जा सकता है? क्या यह मुख्य रूप से सेन हैंड होल्डिंग का मामला है, या क्या कोई तकनीकी कारण है?
संपादित
मुझे पता है कि यह एक भाषा सीमा है हूँ। मैं के बारे में उत्सुक हूं क्यों यह एक भाषा सीमा है।
संपादित 2
ऐसा लगता है कि, जैसा कि अक्सर मामला है, मैं भी कोड मैं वास्तव में बड़ी तस्वीर देखने की में काम कर रहा था के करीब था। मैंने नीचे दिए गए उत्तरों में एक काउंटर-उदाहरण पोस्ट किया है जो दिखाता है कि यह एक खराब बात क्यों है।
मैं कल्पना में पाया कि यह नहीं किया जा सकता है। Http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.2 –
इस बारे में कोई स्पष्टीकरण नहीं है कि यहां जॉन स्कीट का अधिग्रहण है http://stackoverflow.com/questions/1644317/java -कॉन्स्ट्रक्टर-विरासत/1644410 # 1644410 –
मैं आपके संपादन के बारे में उलझन में हूं। आप सोच रहे हैं कि, जब आप एक तर्क के साथ एक कन्स्ट्रक्टर को कॉल करते हैं, तो किसी भी तर्क के साथ एक डिफ़ॉल्ट कन्स्ट्रक्टर को इसके स्थान पर नहीं कहा जा सकता है? स्पष्ट रूप से प्रोग्रामर एक कन्स्ट्रक्टर को कॉल करने की कोशिश नहीं कर रहा था जो पूरी तरह से अपने पैरामीटर को अनदेखा कर देगा, अन्यथा वह पैरामीटर निर्दिष्ट नहीं करता! –