Aquí está el código, he definido dos clases padre llamado y el Hijo, y crearlos en la función principal:¿Cuál es el orden de los constructores en este código Java?
public class Test {
public static void main(String[] args) {
Father father = new Son();
}
}
class Father {
private String name = "father";
public Father() {
who();
tell(name);
}
public void who() {
System.out.println("this is father");
}
public void tell(String name) {
System.out.println("this is " + name);
}
}
class Son extends Father {
private String name = "son";
public Son() {
who();
tell(name);
}
public void who() {
System.out.println("this is son");
}
public void tell(String name) {
System.out.println("this is " + name);
}
}
y me dio la salida como esta:
this is son
this is father
this is son
this is son
, pero no puedo entiendo cómo sucedió esto? ¿Alguien puede decirme por qué?
Lección para aprender: No llame a los métodos de los constructores que se pueden anular. – Thilo
Otra lección que debe aprenderse es que siempre debe tratar de encontrar mensajes de "depuración" que no puedan malinterpretarse: cambiaría sus métodos a algo así como 'System.out.println (" Son.who() "); ',' System.out.println ("Son.tell (" + name + ")"); ',' System.out.println ("Father.who()"); 'y' System.out. println ("Padre.tel (" + nombre + ")"); ' –