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 Son
se 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
final
método- método estático
private
Otros 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