我有以下Java代码,
class Animal {
private String name="Animal";
public String getName() {
return name;
}
}
class Cat extends Animal {
private String name = "Cat";
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.getName());
}
}
运行该代码后,我得到了输出Animal,但我认为应该是Cat。getName在Cat像这样重写方法之后,我得到了Cat。
@Override
public String getName() {
return name;
}
那是因为调用一个继承下来(不是凌驾于)方法的一个子类的实例,就像 cat.getName() 等于调用super.getName()(所以我得到Animal的,而不是Cat在第一种情况)?还是因为实例变量隐藏的奇怪行为(我不太确定)?
相关分类