जावा में, क्या सुपर कन्स्ट्रक्टर चलाने से पहले एक फ़ील्ड शुरू करने का कोई तरीका है?सुपर कन्स्ट्रक्टर रन से पहले क्षेत्र शुरू करें?
भी ugliest हैक्स के साथ मैं संकलक द्वारा अस्वीकार कर दिया जाता है ऊपर आ सकते हैं:
class Base
{
Base(String someParameter)
{
System.out.println(this);
}
}
class Derived extends Base
{
private final int a;
Derived(String someParameter)
{
super(hack(someParameter, a = getValueFromDataBase()));
}
private static String hack(String returnValue, int ignored)
{
return returnValue;
}
public String toString()
{
return "a has value " + a;
}
}
नोट: इस मुद्दे को गायब हो गया जब मैं प्रतिनिधिमंडल को विरासत से प्रयोग किया, लेकिन मैं अभी भी जानना चाहते हैं।
क्या आप फ़ील्ड 'ए' को पूर्व-प्रारंभ करने की कोशिश कर रहे हैं? – Woot4Moo
मुझे नहीं लगता कि आप यह कर सकते हैं। किसी भी कक्षा में जो भी प्रारंभिक होता है (भले ही यह कन्स्ट्रक्टर के बाहर है) 'सुपर' कॉल के बाद हर कन्स्ट्रक्टर में ले जाया जाता है। इसलिए, सुपर कन्स्ट्रक्टर हमेशा फील्ड प्रारंभ करने से पहले चलाया जाता है। –
@FredOverflow 'ए' के बाद से' व्युत्पन्न 'में केवल पहुंच योग्य है, यह क्यों मायने रखता है कि इसे * सुपर()' कहा जाता है * से पहले शुरू किया जाता है? इसके बाद इसे शुरू करने के उदाहरण में आपके द्वारा प्रदान किए जाने वाले उदाहरण में कोई फर्क नहीं पड़ता है (जब तक कि आप बेस कन्स्ट्रक्टर से ओवरडिन विधि को कॉल न करें, जो काफी फिश गंध शुरू होता है)। – assylias