Java - 属性继承示例

Tan*_*guy 3 java inheritance

我对在 Coursera Java 课程的测验中发现的这个继承示例感到困惑:

  • B类是A类的子类
  • B类getPrefix()方法覆盖类'A方法
  • B 类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吗?

Eng*_*uad 7

你能解释一下为什么打印的是 A 类数字属性,而不是 B 类吗?

ClassB不继承ClassA.number字段,而是隐藏它。


看:

在类中,与超类中的字段同名的字段会隐藏超类的字段。