estoy entrenando para un examen de Java, y he encontrado algo que no entiendo en el año último tema. Aquí está el códigoJava "truco", redefiniendo miembro de la clase hija
class Mother {
int var = 2;
int getVar() {
return var;
}
}
class Daughter extends Mother {
int var = 1;
int getVar() {
return var;
}
public static void main(String[] args) {
Mother m = new Mother();
System.out.println(m.var);
System.out.println(m.getVar());
m = new Daughter();
System.out.println(m.var);
System.out.println(m.getVar());
}
}
La pregunta es "¿cuál es la salida de este programa?". Me hubiera ir con 2 2 1 1, pero al compilar y ejecutar esta pieza de código, me sale 2 2 2 1.
Alguien me puede explicar por qué?
Gracias por leer!
'Hija' extiende' Madre'? eso es bastante extraño, ya que en realidad es al revés. – mbx
Estaría interesado en escuchar la razón también. Ejecuté esto en Eclipse y verifiqué los valores con el depurador, el depurador en realidad muestra la variable m local teniendo DOS var-members diferentes después de m = new Daugher() -line. m.var parece resolverse al de Madre (¿quizás porque la variable local está declarada como Madre, no estoy seguro?), y m.getVar() llama al getVar en Hija (como se esperaba). – esaj
Tenga en cuenta que en los programas reales esto no sucedería, porque normalmente haría que 'var' sea privada. Y si alguna vez lo hace accesible desde fuera de la clase, lo que debería ser muy raro, entonces debe asegurarse de que las variables no se ocultan entre sí. – starblue