Salida desconcertante en Java con herencia y métodos de anulación
Me topé con este código.
Traté de adivinar cuál será el resultado de ejecutarlo antes de hacerlo. Estaba realmente confundido cuando los vi y necesitaba algunas explicaciones.
Este es el código:
public class A {
String bar = "A.bar";
A() { foo(); }
public void foo() {
System.out.println("A.foo(): bar = " + bar);
}
}
public class B extends A {
String bar = "B.bar";
B() { foo(); }
public void foo() {
System.out.println("B.foo(): bar = " + bar);
}
}
public class C {
public static void main(String[] args) {
A a = new B();
System.out.println("a.bar = " + a.bar);
a.foo();
}
}
El resultado es:
B.foo(): bar = null
B.foo(): bar = B.bar
a.bar = A.bar
B.foo(): bar = B.bar
¿Porqué es eso?
Como esbar = null
?Por que esa.bar = A.bar
incluso aparece? No he instanciadoA
en absoluto.Y siA
aparece, por qué esdespués B
?