Блоки инициализации. Порядок выполнения при наследовании

Блоки инициализации. Порядок выполнения при наследовании

Порядок вызова конструктора и блоков инициализации у потомка и предка:
1. Вызываются все статические блоки инициализации по очереди от предка к потомку
2. Вызываются попарно динамические блоки инициализации и конструкторы по очереди от предка к потомку.

Статический блок инициализации родителя один для всех наследников. Выполняется только один раз.


class Car {

    static { System.out.println("Car: Static block");  }

    { System.out.println("Car: Dynamic block");  }

    Car() {
        System.out.println("Car: Constructor");
    }

    Car(String model) {
        System.out.println("Car: Constructor. My model is " + model);
    }
}


class FastCar extends Car {

    static String color;
    int topSpeed;

    static {
        color = "red";
        System.out.println("FastCar: Static block");
    }

    {
        topSpeed = 400;
        System.out.println("FastCar: Dynamic block");
    }

    FastCar(String model) {
        super(model); // Если закомментировать, вызовется Car();
        System.out.println("I'm FastCar. My Top speed is "
                + topSpeed + " km/h. My color is " + color);
    }
}


class Lorry extends Car {

    static String color;
    int topSpeed;

    static {
        color = "gray";
        System.out.println("Lorry: Static block");
    }

    {
        topSpeed = 186;
        System.out.println("Lorry: Dynamic block");
    }

    Lorry() {
        System.out.println("I'm Lorry. My Top speed is "
                + topSpeed + " km/h. My color is " + color);
    }
}


class Main {

    public static void main(String[] args) {
        new FastCar("Saleen S7 Twin Turbo");
        System.out.println("---------------------");
        new Lorry();
    }
}
    /*
    Car: Static block <- Вызвался только один раз при вызове первого потомка.
    FastCar: Static block
    Car: Dynamic block
    Car: Constructor. My model is Saleen S7 Twin Turbo
    FastCar: Dynamic block
    I'm FastCar. My Top speed is 400 km/h. My color is red
    ---------------------
    Lorry: Static block
    Car: Dynamic block
    Car: Constructor
    Lorry: Dynamic block
    I'm Lorry. My Top speed is 186 km/h. My color is gray
     */
Методы и Инкапсуляция