我对在 Coursera Java 课程的测验中发现的这个继承示例感到困惑:
getPrefix()方法覆盖类'A方法number属性覆盖类的 A 属性class ClassA {
protected int number;
public ClassA() {
number = 20;
}
public void print() {
System.out.println(getPrefix() + ": " + number);
}
protected String getPrefix() {
return "A";
}
}
class ClassB extends ClassA {
protected int number = 10;
protected String getPrefix() {
return "B";
}
}
public class Quizz {
public static void main(String[] args) {
ClassB b = new ClassB();
b.print();
ClassA ab = new ClassB();
ab.print();
}
}
Run Code Online (Sandbox Code Playgroud)
当我们运行这个程序时,打印的结果是:
B: 20
B: 20
Run Code Online (Sandbox Code Playgroud)
但是,我期待的是这样的结果:
B: 10
B: 10
Run Code Online (Sandbox Code Playgroud)
你能解释为什么number打印的是 class A属性,而不是 classB吗?
你能解释一下为什么打印的是 A 类数字属性,而不是 B 类吗?
ClassB不继承ClassA.number字段,而是隐藏它。
看:
在类中,与超类中的字段同名的字段会隐藏超类的字段。