Java中的继承机制看似简单,实际上包含了很多细节。最近在刷题过程中屡屡跳坑,于是自己仔细再学习了一下Java中子类初始化的细节,与大家分享。

class Father
{
Father(){};
}
class Child extends Father
{
super(); //隐式地调用父类构造函数,对父类进行初始化
int age = 10;
Child(){};
}

以以上代码为例:

若执行Child child = new Child();

(1)首先对子类变量进行初始化(int age=0);

(2)执行子类Child构造函数中的隐式super(),调用父类构造函数对父类进行初始化;

(3)执行子类Child构造函数中的其余部分,对子类进行初始化;

(4)对子类变量进行初始化(child.age = 10)

下面我们用一个例子,结合多态来详细说明该初始化过程:

class Father
{
Father()
{
show();
}
void show()
{
System.out.println("father");
}
} class Child extends Father
{
int age = 9;
Child()
{
//隐式super();
System.out.println("child"+age);
}
void show()
{
System.out.println("show"+age);
}
} public class ChuShiHua
{
public static void main(String[] args)
{
Father child = new Child();
}
}

(1)执行Child child = new Child();时:首先默认初始化child.age = 0;(int类的默认初始化值为0)

(2)执行Child类的构造器,首先执行其中的隐式super(),于是执行父类Father的构造器,执行函数体中的show()’

(3)因为多态机制,子类中也有show(),所以执行子类中的show(),输出show0

(4)父类初始化完毕,接着对子类中的变量赋值(child.age=9)

(5)接着执行子类构造器中的语句,输出child9

所以最后的输出是:

show0

child9

在分析此类问题时要特别注意子类在执行构造器时会先执行一个隐式的super()

这意味着子类调用构造器时要先执行父类的无参数构造器对父类进行初始化,如果父类没有无参构造器,则会出现如下编译错误:

最新文章

  1. Visual Studio CLR Profiler
  2. 设置IE8 多个Table只产生一个进程
  3. C#强力粉碎文件代码分享,升级中用到
  4. AsyncTask的注意事项
  5. TP复习15
  6. maven 项目编译时候提示:Error building POM (may not be this project's POM).
  7. iOS开发中打开本地应用、打开appStore应用、给app评分功能实现
  8. VMware Ubuntu安装详细过程
  9. Arcgis - Personal Geodatabase 和 File Geodatabase的区别.
  10. strut2服务器与android交互数据
  11. node.js搭建Web服务器
  12. js, Date.parse firefox 兼容
  13. pycharm(pythoon3)_django2.0_xadmin创建测试用例后台管理系统
  14. (5)Linux权限管理
  15. centos系统有多个内核,修改默认启动内核
  16. SPLAY,LCT学习笔记(四)
  17. 调用 微信接口报错 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
  18. 红外光通信装置数字部分思路点睛 2013年国赛f题
  19. ajax在jQuery中的应用 (1)加载异步数据
  20. hyper-v 无线网连接

热门文章

  1. php进阶--菜鸟之路
  2. leetcode971
  3. [转]再识Cortex-M3之堆栈
  4. python安装selenium和下载浏览器驱动
  5. 记一次Monolog的BufferHandler使用
  6. docker 启动报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
  7. VB6 Collection实现百万文本去重
  8. [FE] 有效开展一个前端项目2 (vuejs-templates/webpack)
  9. python+requests库,接口自动化
  10. C# 异步示例代码