मैंने निम्न कोड लिखा है और सुपर क्लास के लिए ऑब्जेक्ट बनाया है।उप वर्ग 'स्थैतिक कोड निष्पादित क्यों किया जा रहा है?
class SuperClass{
static int a=2;
static int b(){
return 2;
}
int c(){
return 2;
}
SuperClass(){
System.out.println("Super");
}
static {
System.out.println("super");
}
}
public class Sub extends SuperClass{
Sub(){
System.out.println("Sub");
}
static {
System.out.println("sub");
}
static int b(){
return 3;
}
int c(){
return 3;
}
public static void main(String ax[]){
SuperClass f =new SuperClass();
System.out.println(f.c());
System.out.print(SuperClass.b());
}
}
जब मैं उत्पादन की जाँच की, यह इस प्रकार है:
super
sub
Super
2
2
मुझे पता है कि स्थिर ब्लॉक केवल निष्पादित किया जाता है जब वर्ग की वस्तु आरंभ नहीं हो जाता या किसी स्थिर संदर्भ किया जाता है। लेकिन यहां, मैंने इनमें से कोई भी उप वर्ग में नहीं बनाया है। तो मैं "उप" यानी उप वर्ग 'स्थैतिक ब्लॉक आउटपुट क्यों देखूं?
'मुख्य' विधि को निष्पादित करना (जो 'उप' वर्ग में घोंसला है) एक स्थिर संदर्भ है। :) –
@ कॉन्स्टेंटिन योवकोव मैंने इसके बारे में सोचा, लेकिन फिर भी "सब" पहले अधिकार आना चाहिए। अब, उस संदेह को बथशेबा के उत्तर से मंजूरी दे दी गई है क्योंकि सुपर और उप वर्गों के क्रम में स्थैतिक ब्लॉक निष्पादित किए जाते हैं। धन्यवाद। – AV94
@anil पहले नहीं, 'उप' वर्ग अभी भी' सुपर 'वर्ग पर निर्भर करता है, जिसे पहले निष्पादित किया जाता है। – njzk2