派生类构造函数 创建顺序(阿里笔试题)
派生类 与基类的关系:
(1)创建构造函数的顺序 :基类构造函数(注意此处基类的成员不能初始化) ==>派生类成员初始化 ==>派生类构造函数
(2)派生类的构造函数 中 基类的构造函数默认在第一条,如果不写super(),则默认在第一条,注意位置不能颠倒
(3)派生类可以继承全部的基类的构造函数
阿里笔试题 举个栗子:
1 package com.test; 2 3 public class DispatchTest { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 Base b=null; //此处如果 换成 Sub b=null,则b.x=40;不再是20 8 b=new Sub(); 9 System.out.println(b.x); 10 } 11 12 static class Base { 13 14 int x =10; 15 16 public Base(){ 17 this.printMessage(); 18 x=20; 19 } 20 21 public void printMessage(){ 22 System.out.println("Base.x="+x); 23 } 24 25 } 26 27 static class Sub extends Base{ 28 29 int x =30; 30 public Sub(){ 31 super();//此处的super();去掉也可以,默认执行super(); 而且只能在构造函数的第一行,如果放在其他行,编译错误, 32 this.printMessage(); 33 x=40; 34 35 } 36 37 public void printMessage(){ 38 System.out.println("Sub.x="+x); 39 } 40 } 41 42 }
结果打印为:
Sub.x=0 Sub.x=30 20
如上分析可以看出 第八行开始初始化 派生类Sub的构造函数,按照刚才的顺序
首先初始化基类的构造函数(不包含基类成员)因此
(1)基类的构造函数==>执行 17行,this.printMessage();注意此处的this是派生类,并且派生类的成员还没有初始化,因此x=0;
打印 Sub.x=0
(2)执行18行,基类的x =20
(3)派生类的成员==>执行29行 x=30;
(4)派生类构造函数==>执行32行;打印 Sub.x=30;
(5)然后执行9行,注意,此处的Sub属于派生类,包含了两类实例 基类 base b 和 sub b,
因为第7行强制转化为基类,因此 b.x =20(基类的) 打印 20;
如果第7行为Sub b,则b.x=40(派生类) 打印 40;
综上 结果:
Sub.x=0 Sub.x=30 20
参考:
http://tieba.baidu.com/p/1453582263
http://blog.csdn.net/m631521383/article/details/9819241
http://blog.csdn.net/libaineu2004/article/details/19565229
派生类构造函数 创建顺序(阿里笔试题)相关推荐
- java类初始化顺序-阿里笔试题
阿里笔试题之写出程序输出结果: package com.patrick.bishi;public class TestVar {public static int k = 0;public stati ...
- c++中的派生类构造函数和析构函数
1.派生类构造函数 派生类的构造函数必须自己定义,因为要对新增数据成员进行初始化.如果想要同时初始化基类的数据成员,必须调用基类的构造函数. 创建一个派生类对象的时候,首先调用基类的构造函数,再调用派 ...
- 详解派生类构造函数与析构函数
1.派生类构造函数: 派生类不能继承基类的构造函数,必须自己定义构造函数进行新增数据成员初始化工作,如果想同时初始化基类数据成员,必须调用基类构造函数. (1)简单派生类构造函数: 1 #includ ...
- 派生类构造函数的执行顺序
一个派生类构造函数的执行顺序如下: 虚拟基类的构造函数(多个虚拟基类则按照继承的顺序执行构造函数). 基类的构造函数(多个普通基类也按照继承的顺序执行构造函数). 对象的vptr被初始化: 成员对象构 ...
- 阿里笔试题(2015)持续更新中
第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题 废话不多说,直接上题和答案 平 ...
- 构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...
虚基类及其派生类构造函数[1] 建立对象时所指定的类称为最远派生类. 虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的. 在整个继承结构中,直接或间接继承虚基类的所有派生类,都 ...
- 阿里笔试题:或运算的最小翻转次数 C++
阿里笔试题:或运算的最小翻转次数 C++ 题目描述 输入输出示例 解题思路 代码 题目描述 给出一个数字n,表示有n组输入用例子,每一组输入给出三个正整数a.b.c,可以对a和b进行位翻转操作,每一次 ...
- 阿里笔试题第二题之-------容错技术
阿里笔试题第二题之---容错技术 定义:容错就是当由于种种原因在系统中出现了数据.文件损坏或丢失时,系统能够自动将这些损坏或丢失的文件和数据恢复到发生事故以前的状态,使系统能够连续正常运行一种技术. ...
- 2020年3月25日阿里笔试题
2020年3月25日阿里笔试题 题目描述一 python代码 题目描述二 求公差的python代码 处理上述情况的代码 仿佛人生总有一种魔咒,自己做的这场笔试题永远是最难的.不过今天的笔试题,真的 ...
- 2020年3月23日阿里笔试题
2020年3月23日阿里笔试题 题目描述 题目分析 这是阿里的第二场笔试,本来觉得没啥好写的,一道排列组合,一道迷宫.没有什么发挥的空间.但是后来在和大家讨论的过程中,把这道题的公司给敲出来了,但 ...
最新文章
- easycode自定义模板转载
- 在C++中调用PARI/GP库的方法
- eclipse git拉取失败_Git(四):分支
- 40个极简WordPress主题
- Spring MVC 事务配置
- DMA和IOMMU概念理解
- AutoCAD自定义填充图样详细教程
- 通过Cadence学拉扎维的第1天-直流仿真、交流仿真、瞬态仿真和参数扫描(以上期共源为例)
- BIGEMAP如何下载高程卫星地图
- 【人机】确认框中的“取消/确定”要如何设计呢?
- 前端面试-面试官常见问题
- POI导出设置列为文本类型
- web前端面试题之魂(js)
- 解决0xc000012f 损坏的映像rasman.dll没有被指定在windows运行问题
- Tomcat 8 性能优化
- 什么是进程,进程的特征
- Three.js-灯光与阴影
- Bluetooth技术学习笔记 ——HFP控制功能之连接管理
- linux中ret2libc入门与实践
- 基于HTML美食餐饮文化项目的设计与实现——吃货部落零食12页