public class Base {
public Base() {
x = 0;
bar();
}
public Base(int x) {
this.x = x;
foo();
}
public void foo() {
System.out.println("Base.foo : " + x);
}
private void bar() {
System.out.println("Base.bar:" + x.toString());
}
protected Integer x;
}
public class Derived extends Base {
public Derived() {
bar();
}
public Derived(int x, int y) {
super(x);
this.y = y;
}
public void foo() {
System.out.println("Derived.foo : " + x + ", " + y);
}
public void bar() {
System.out.println("Derived.bar:" + x.toString() + ", " + y.toString());
}
private Integer y;
public static void main(String[] args) {
Base b = new Derived(10, 20);
}
}
¿Por qué imprime "Derived.foo:" 10, nulll
y no 20 en lugar de nulo? y es una variable privada de Derived, y se inicializó con 20. está en su alcance ... entonces ¿por qué es nulo?Java: ¿por qué imprime nulo?
+1. Bien explicado. – Mikaveli
+1, especialmente para advertencias de mala práctica: _puede llamar a métodos anulados en objetos parcialmente construidos_. –