在探索scjp问题时,我遇到了我发现很奇怪的行为。Java继承问题
我宣布两个类项目和博尔特如下:
class Item {
int cost = 20;
public int getCost() {
return cost;
}
}
class Bolt extends Item {
int cost = 10;
public int getCost() {
return cost;
}
}
,并试图访问成本的值的两倍
public class Test {
public static void main(String[] args) {
Item obj = new Bolt();
System.out.println(obj.cost);
System.out.println(obj.getCost());
}
}
我得到的输出是20 10 我可以”不明白这是怎么发生的。
否。@Override仅表示您希望此方法覆盖另一个方法,并且如果不是这种情况,它应该会产生错误。但只要方法具有相同的签名,第二个就会覆盖第一个。 Java 5之前不存在注释。 –
@ netbrain,子类的getCost方法正常工作。我对直接调用obj.cost的结果很好奇。但正如Sanjay所说,这是由于运行时多态性仅适用于方法而不适用于字段。 –