Mientras exploraba las preguntas scjp, me encontré con este comportamiento que me pareció extraño.Problema de herencia de Java
me han declarado dos clases artículo y el perno de la siguiente manera:
class Item {
int cost = 20;
public int getCost() {
return cost;
}
}
class Bolt extends Item {
int cost = 10;
public int getCost() {
return cost;
}
}
y trató de acceder al valor de costo el doble
public class Test {
public static void main(String[] args) {
Item obj = new Bolt();
System.out.println(obj.cost);
System.out.println(obj.getCost());
}
}
La salida que se ve es 20 10. lo que pueda' Entiendo cómo sucede esto.
No. @Override es solo una indicación para el compilador de que desea que este método anule a otro, y que debería producir un error si no es el caso. Pero tan pronto como los métodos tengan la misma firma, el segundo reemplaza al primero. Las anotaciones no existían antes de Java 5. –
@netbrain, el método getCost de la subclase funciona bien. Tenía curiosidad sobre el resultado de llamar directamente a obj.cost. Pero como Sanjay dice, se debe al hecho de que el polimorfismo en tiempo de ejecución es aplicable solo a los métodos, no a los campos. –