Podczas eksploracji pytań SCJP natknąłem się na to zachowanie, które znalazłem dziwnym.Wydanie Java Inheritance
I zadeklarowały dwie klasy element i Bolt następująco:
class Item {
int cost = 20;
public int getCost() {
return cost;
}
}
class Bolt extends Item {
int cost = 10;
public int getCost() {
return cost;
}
}
i próbował uzyskać dostęp do wartości kosztów dwukrotnie
public class Test {
public static void main(String[] args) {
Item obj = new Bolt();
System.out.println(obj.cost);
System.out.println(obj.getCost());
}
}
Wyjście mogę to 20 10. mogę” t zrozumieć, jak to się dzieje.
Nie. @Override jest tylko wskazówką dla kompilatora, że ta metoda ma zastąpić inną, i że powinna spowodować błąd, jeśli tak nie jest. Ale gdy metody mają tę samą sygnaturę, druga z nich zastępuje pierwszą. Adnotacje nie istniały przed Java 5. –
@netbrain, metoda getClost podklasy działa dobrze. Byłem ciekawy wyniku bezpośredniego wywołania obj.cost. Ale, jak mówi Sanjay, wynika to z faktu, że polimorfizm w czasie wykonywania dotyczy tylko metod, a nie pól. –