首页 > 解决方案 > Java - 属性继承示例

问题描述

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

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();

    }
}

当我们运行这个程序时,打印的结果是:

B: 20
B: 20

但是,我期待的是这个结果:

B: 10
B: 10

您能解释一下如何number打印 class A 属性而不是 classB吗?

标签: javainheritance

解决方案


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

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


看:

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


推荐阅读