Here is the code:
public class Main {
    public static void main(String[] args) {
        new B();
    }
}
class A {
    A() {
        System.out.println("A constructor before");
        action();
        System.out.println("A constructor after");
    }
    protected void action() {
        System.out.println("Never called");
    }
}
class B extends A {
    private final int finalField = 42;
    private int field = 99;
    B() {
        System.out.println("B constructor");
        action();
    }
    public void action() {
        System.out.println("B action, finalField=" + finalField + ", field=" + field);
    }
}
And the result is:
A constructor before
B action, finalField=42, field=0
A constructor after
B constructor
B action, finalField=42, field=99
I confused by this line :
B action, finalField=42, field=0
Object B is not completely initialized and when we call method "action" from super class constructor - variable "field" has a default value, but the final variable "finalField" already has value 42.
When was the "finalField" initialized?
 
     
    