In welcher Reihenfolge werden statische Blöcke und Initialisierungsblöcke bei Verwendung der Vererbung ausgeführt?

Ich habe zwei Klassen Eltern und Kind

public class Parent {    
    public Parent() {
        System.out.println("Parent Constructor");
    }    
    static {
        System.out.println("Parent static block");    
    }    
    {
        System.out.println("Parent initialisation  block");
    }
}

public class Child extends Parent {    
    {
        System.out.println("Child initialisation block");
    }
    static {
        System.out.println("Child static block");
    }

    public Child() {
        System.out.println("Child Constructor");
    }    
    public static void main(String[] args) {
        new Child();    
    }
}

Die Ausgabe des obigen Codes wird sein

Parent static block
Child static block
Parent initialization  block
Parent Constructor
Child initialization block
Child Constructor

Warum führt Java den Code in dieser Reihenfolge aus? Welche Regeln bestimmen die Ausführungsreihenfolge?

Antworten auf die Frage(11)

Ihre Antwort auf die Frage