W jakiej kolejności wykonywane są bloki statyczne i bloki inicjalizacyjne podczas korzystania z dziedziczenia?
Mam dwie klasy rodziców i dzieci
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();
}
}
Wyjście powyższego kodu będzie
Parent static block
Child static block
Parent initialization block
Parent Constructor
Child initialization block
Child Constructor
Dlaczego Java wykonuje kod w tej kolejności? Jakie są reguły określające kolejność wykonywania?