Java构造器使用方法及注意事项

超类的构造器在子类的构造器运行之前运行,也就是说,在创建对象时,先运行超类中的构造器,然后再运行子类中的构造器,此时,如果在执行超类构造器的时候,构造器执行了可覆盖的方法,那么就会去调用子类中的该方法,而此时子类还未被实例化,此时就有可能出问题。
以一个例子说明:
public class Super {
int age = 10;
protected void say() {
System.out.println("super");
}
public Super() {
override();
}
public void override() {
System.out.println("super override");
}
}
class Sub extends Super {
int age = 9;
private final Date date;
public Sub() {
date = new Date();
}
@Override
public void override() {
System.out.println(date);
}
@Override
protected void say() {
System.out.println("sub");
}
public static void main(String[] args) {
Super sub = new Sub();
sub.override();
// sub.say();
// System.out.println(sub.age);
}
}
创建两个类,一个 Super.java,其中定义一个成员变量 age=10,并且在构造器中调用了 override() 方法。Sub.java 继承了 Super.java,并且在构造方法中初始化了 date。
现在我们执行 main 方法,控制台会打印出什么呢? 是一个 date? 还是两个 date? 答案是先打印出 null,然后打印出具体的 date 值。并且如果在 Sub.java 的 override 方法中调用 date 的任意方法时,会出现 NPE
为什么会这样呢?
我们知道在使用 new 来创建对象的时候,会先检查该类是否继承自父类,如果是,则会先调用父类的构造方法,该案例中,在 new Sub() 时,发现 Sub 是 Super 的子类,于是先调用 Super 的构造方法,在 Super 构造方法中,发现调用了 override 方法,于是又去寻找子类 Sub 是否重写了 override 方法,发现该子类重写了,则调用子类的 override,打印出 date,而此时 date 还未被初始化,所以值为 null。
在父类的构造方法执行完毕后,再执行子类的构造方法,此时 date 被初始化了,所以再次调用 override 方法时,则会正确打印出 date。
当调用 sub.age,会打印出什么呢?是 10 还是 9 ?
其实是打印出 10,创建对象的时候,实例变量有两种类型,前面是声明类型,后面是实际类型
Super sub = new Sub();
sub 的声明类型为 Super,实际类型为 Sub。
当调用成员变量的时候,会先在声明类型中寻找该变量,如果该变量存在,则使用声明类型中的变量值,如果不存在,则在实际类型中去寻找该变量。
而调用方法的话,优先在子类中寻找对应方法,如果子类中不存在,再调用父类中方法。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言,本站还有很多java 的文章,欢迎大家搜索参阅!
# Java构造器
# java
# 构造方法详解
# Java基础教程之构造器与方法重载
# 通过实例了解java spring使用构造器注入的原因
# Java私有构造器使用方法示例
# 实例解析Java中的构造器初始化
# Java 构造器原理及用法解析
# java 页面url传值中文乱码的解决方法
# java中文传值乱码问题的解决方法
# javascirpt实现2个iframe之间传值的方法
# java及C++中传值传递、引用传递和指针方式的理解
# Java构造器与传值学习总结
# 子类
# 类中
# 不存在
# 写了
# 什么呢
# 则会
# 未被
# 是一个
# 就有
# 如有
# 希望能
# 而此时
# 发现该
# 然后再
# 欢迎大家
# 中去
# 有两种
# 谢谢大家
# 会去
# 则在
相关文章:
制作宣传网站的软件,小红书可以宣传网站吗?
建站之星各版本价格是多少?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
专业网站建设制作报价,网页设计制作要考什么证?
高端云建站费用究竟需要多少预算?
Android自定义listview布局实现上拉加载下拉刷新功能
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
招商网站制作流程,网站招商广告语?
如何使用Golang安装API文档生成工具_快速生成接口文档
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
如何在Golang中使用replace替换模块_指定本地或远程路径
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
,在苏州找工作,上哪个网站比较好?
广东企业建站网站优化与SEO营销核心策略指南
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何零基础在云服务器搭建WordPress站点?
建站之星伪静态规则如何设置?
如何高效搭建专业期货交易平台网站?
如何使用Golang table-driven基准测试_多组数据测量函数效率
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
,怎么用自己头像做动态表情包?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
网站企业制作流程,用什么语言做企业网站比较好?
如何通过服务器快速搭建网站?完整步骤解析
如何基于云服务器快速搭建网站及云盘系统?
广平建站公司哪家专业可靠?如何选择?
,购物网站怎么盈利呢?
网站制作公司,橙子建站是合法的吗?
如何快速搭建虚拟主机网站?新手必看指南
如何在Windows 2008云服务器安全搭建网站?
如何有效防御Web建站篡改攻击?
深圳网站制作培训,深圳哪些招聘网站比较好?
建站之星如何实现网站加密操作?
高端网站建设与定制开发一站式解决方案 中企动力
如何批量查询域名的建站时间记录?
如何通过远程VPS快速搭建个人网站?
已有域名如何免费搭建网站?
如何选择适配移动端的WAP自助建站平台?
如何快速搭建高效WAP手机网站吸引移动用户?
如何快速选择适合个人网站的云服务器配置?
高防服务器租用如何选择配置与防御等级?
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何快速启动建站代理加盟业务?
Python文件管理规范_工程实践说明【指导】
实例解析Array和String方法
*请认真填写需求信息,我们会在24小时内与您取得联系。