java - Java - 属性继承示例
问题描述
我对 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();
}
}
当我们运行这个程序时,打印的结果是:
B: 20
B: 20
但是,我期待的是这个结果:
B: 10
B: 10
您能解释一下如何number
打印 class A 属性而不是 classB
吗?
解决方案
你能解释一下为什么会打印 A 类数字属性,而不是 B 类吗?
ClassB
不继承ClassA.number
字段,而是隐藏它。
看:
在一个类中,与超类中的字段同名的字段会隐藏超类的字段。
推荐阅读
- mongodb - 在分片集群上创建用户
- php - Symfony 4 在登录失败时检索用户的电子邮件
- datetime - BigQuery - 从时区名称获取时区偏移量
- r - 在 Shiny 中,加载数据,然后预处理到全局环境,然后显示 UI
- javascript - 如何在 jsonServer 中将自定义路由移到 server.js 之外
- python - ball animation is really junky while running pong game
- c++ - 在自定义哈希表头文件中包含自定义链接列表
- sql - 严格按顺序将两个表连接在一起
- excel - 旋转图片然后设置旋转后的属性
- android - 约束布局下的ListView在预览中消失