La ejecución de la clase del niño bloque estático deriva de la clase abstracta

Anshul Kumar:
public class Test15 {
    public static void main(String[] args) {
        System.out.println(B.x);
    }
}

abstract class A { 
    static int x=99;

    A() {
        System.out.println("A DC");
    }

    static {
        System.out.println("A SB");
    }
}

class B extends A {
    static {
        System.out.println("B Sb");
    }
}

¿Por qué en el programa anterior no se ejecuta el bloque estático clase hija?

Eran :

xes una staticvariable de clase A, por lo que aunque se accede a él a través B.x, no hay necesidad de inicializar la clase B. Por lo tanto, la clase B's staticno se ejecuta inicializador.

He aquí las pertinentes JLS 12.4.1 cita :

Una referencia a un campo estático (§8.3.1.1) provoca la inicialización de sólo la clase o interfaz que realmente declara que, a pesar de que podría ser referido a través del nombre de una subclase, una subinterfaz, o una clase que implementa una interfaz.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=234346&siteId=1
Recomendado
Clasificación