java - java构造函数是如何工作的?
问题描述
我有以下程序:
class A{
int b = 50;
}
class B extends A{
int b = 20;
}
public class Maini{
public static void main(String[] args){
A a = new B();
System.out.println(a.b);
}
}
结果是 50,我想知道为什么?在我运行代码之前,我很确定结果应该是 20。
解决方案
这与构造函数的工作方式无关。
请注意,b
classB
中的成员变量不会覆盖 class 中的成员b
变量A
。只有非静态的、非私有的方法可以被覆盖。成员变量不能被覆盖。
如果你有一个 class 的实例B
,那么它实际上有两个名为 的成员变量b
:一个在对象的超类 ( A
) 部分,一个在子类部分 ( B
)。
您看到值 50(即对象部分中的值)b
的原因是因为方法中A
的变量是 类型。如果将其更改为,您将获得 20:a
main
A
B
B a = new B(); // instead of A a = ...;
推荐阅读
- swift - Firestore 查询选项 swift
- php - Mysql 服务器于 2006 年消失 - 仅与 CRON 和 ajax 一起使用
- angular - ngx-datatable - 材质主题路由器动画
- apache-kafka - kafka流窗口计数输出不可读
- java - 无法在硒中捕获屏幕截图
- php - 谢谢你的帮忙
- r - 通过 fromjson 解析 JSON URL 列表
- javascript - 无法触发“DOMContentLoaded”事件的事件处理程序
- android - 当 popbackstack OnResume(), OnCreateView() 时,什么都没有被调用。但显示了前一个片段。想恢复fragment怎么办?
- ime - 我不知道为什么我不能得到 ImmGetCandidateList() func 的“汉字列表”