Hello Can anybody explain this output of the code below to me?
The output is:
Constructor in SuperclassA
Instance initializer block in SubclassB
Instance initializer expression in SubclassB
Non-default constructor in SubclassB
Default constructor in SubclassB
value: 3
When is Instance constuctor in SuperClassA called and when is
Instance initializer block in SubclassB called and Instance initializer
expression in SubclassB called? Thanks for looking into my question.
class SuperclassA {
public SuperclassA() { // (1)
System.out.println("Constructor in SuperclassA");
}
}
class SubclassB extends SuperclassA {
SubclassB() { // (2)
this(3);
System.out.println("Default constructor in SubclassB");
}
SubclassB(int i) { // (3)
System.out.println("Non-default constructor in SubclassB");
value = i;
}
{ // (4)
System.out.println("Instance initializer block in SubclassB");
value = 2; // (5)
}
int value = initializerExpression(); // (6)
private int initializerExpression() { // (7)
System.out.println("Instance initializer expression in SubclassB");
return 1;
}
}
public class ObjectConstruction {
public static void main(
String[] args) {
SubclassB objRef = new SubclassB(); // (8)
System.out.println("value: " + objRef.value);
}
}
This is code from Prof.K's book: