tengo 3 clases:Si sobrescribe un campo en una subclase de una clase, la subclase tiene dos campos con el mismo nombre (y tipo diferente)?
public class Alpha {
public Number number;
}
public class Beta extends Alpha {
public String number;
}
public class Gama extends Beta {
public int number;
}
¿Por qué compilar el siguiente código? Y, ¿por qué pasa la prueba sin ningún error de tiempo de ejecución?
@Test
public void test() {
final Beta a = new Gama();
a.number = "its a string";
((Alpha) a).number = 13;
((Gama) a).number = 42;
assertEquals("its a string", a.number);
assertEquals(13, ((Alpha) a).number);
assertEquals(42, ((Gama) a).number);
}
Y? funciona así. Si necesita anular, debe usar métodos setter/getter. El campo público es casi siempre una mala idea. – kan