Inicialización inicializar la instancia de la clase: preguntas cara

código:

public class Father {
    private int i = test();

    private static int j = method();


    static {
        System.out.print("(1)");
    }

    public Father() {
        System.out.print("(2)");
    }

    {
        System.out.print("(3)");
    }

    public int test() {
        System.out.print("(4)");
        return 1;
    }

    private static int method() {
        System.out.print("(5)");
        return 1;
    }
}

public class Son extends Father {
    private int i = test();

    private static int j = method();


    static {
        System.out.print("(6)");
    }

    public Son() {
        System.out.print("(7)");
    }

    {
        System.out.print("(8)");
    }

    public int test() {
        System.out.print("(9)");
        return 1;
    }

    private static int method() {
        System.out.print("(10)");
        return 1;
    }

    public static void main(String[] args) {
        Son son1 = new Son();
        System.out.println();
        Son son2 = new Son();
    }
}

El resultado:

(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
(9)(3)(2)(9)(8)(7)

análisis:

Cuando el principal método de operación, primero inicializar la clase, ya que Sonse hereda Father, por lo que la primera clase inicializar el Padre, el Hijo y entonces la clase

clase de inicialización

Inicializar las variables estáticas de clase en el interior, el bloque de código estático, salida: matriz (5) (1) una subclase de (10) (6)

Ejemplos de inicialización

  • variables miembro de clase de padres se inicializan, bloque, constructores, salida: (9) (3) (2)

  • variables miembro Subclase se inicializan, bloque, constructores, salida: (9) (8) (7)

problema:

de prueba (1) por encima de la razón por el método de la clase padre () no tiene efecto ella?

Se debe test()anulado por subclases, y cuándo llamar al test()tiempo, hay una implícita this()método, llamar a la clase padre es en realidad una subclasetest()

(2) El método de la clase padre no será en todos los casos reescribirse, tales como las siguientes situaciones

  • finalmétodo
  • método estático
  • privateOtros métodos no son visibles en la subclase

(3) de la secuencia de ejecución y la ubicación de la

Si la ubicación de las variables del bloque de código estático y miembro estático de intercambio, se encuentra que los resultados van a cambiar, la empatía, el intercambio mutuo cambiará no estático variables miembro y bloque de código que ocurrirá, será ejecutado en el orden de arriba a abajo

resumen:




Supongo que te gusta

Origin www.cnblogs.com/songjilong/p/12444456.html
Recomendado
Clasificación