संचालन के क्रम में एकमात्र वास्तविक अंतर है। कक्षाओं के निर्माता के नाम से पहले उनके घोषणा में शुरू किए गए फ़ील्ड का मूल्यांकन किया जाता है। इस तरह से उप-वर्ग में शुरू किए गए फ़ील्ड का मूल्यांकन सुपर के कन्स्ट्रक्टर के पूरा होने के बाद किया जाएगा लेकिन उप-वर्ग के निर्माता को बुलाए जाने से पहले।
निम्न उदाहरण पर विचार करें:
public class Tester {
Tester (String msg) {
System.out.println(this + ":" + msg);
}
}
मैं एक सुपर वर्ग है:
public class Test {
protected Tester t1 = new Tester("super init block");
Test (String constructorMsg) {
new Tester(constructorMsg);
}
}
और मैं एक उपवर्ग है:
Public class TestSub extends Test {
private Tester t2 = new Tester("sub init block");
TestSub(String constructorMsg) {
super(constructorMsg);
new TTester("sub constructor");
}
}
मैं एक परीक्षण वर्ग है
मेरी 01 मेंविधि, मैं TestSub
का एक उदाहरण बनाने के लिए:
[email protected]:super init block
[email protected]:super constructor
[email protected]:sub init block
[email protected]:sub constructor
जॉन स्कीट का संपादन फिर –
हड़ताल तुम भी एक उदाहरण प्रारंभकर्ता के साथ एक ही बाईटकोड मिलता है:
परिणाम इस प्रकार हैं? मुझे लगता है कि जवाब हाँ है। –
@mmyers: हाँ, बिल्कुल वही। –