黑马程序员技术交流社区
标题:
继承中的初始化问题
[打印本页]
作者:
joeywr
时间:
2015-8-22 11:34
标题:
继承中的初始化问题
package chapter7;
public class TestExtendsAndStatic {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EC ec=new EC(2);
}
}
class EA{
EA(){
System.out.println("EA");
}
EA(int i){
System.out.println("EA "+i);
}
}
class EB{
EB(){
System.out.println("EB");
}
}
class EC extends EB{
EA ea=new EA(1);
static EA eaS=new EA(2);
EC(){
System.out.println("EC");
}
EC(int i){
System.out.println("EC "+i);
}
}
首先初始化static成员 输出 EA 2
然后是成员 ea 输出EA 1
然后在EC的构造器中调用基类EB的构造器输出 EB
最后执行EC的构造器输出 EC 2
但是结果是
EA 2
EB
EA 1
EC 2
第二行和第三行顺序颠倒了 我不知道该怎么理解了……
作者:
vipsong
时间:
2015-8-22 13:06
本帖最后由 vipsong 于 2015-8-22 13:11 编辑
可以参见
传智播客_2015年Java基础班视频精华版\day08\avi\08.21_面向对象(继承中的面试题3).avi
复制代码
A:成员变量的问题
int x = 10; //成员变量是基本类型
Student s = new Student(); //成员变量是引用类型
B: 一个类的初始化过程
成员变量的初始化
默认初始化
显示初始化
构造方法初始化
C:子父类的初始化(分层初始化)
先进行父类初始化,然后进行子类初始化。
复制代码
所以综上所述。
1、static EA eaS = new EA(2);
打印EA 2
2、先进行父类初始化,然后进行子类初始化。
EC(int i) {
// super(); //父类空参构造
System.out.println("EC " + i);
}
复制代码
所以打印EB
3、子类初始化
成员变量初始化
EA ea = new EA(1);
复制代码
打印输出EA1
4、子类构造方法
输出EC 2
结果:
EA 2
EB
EA 1
EC 2
复制代码
作者:
以梦为马123
时间:
2015-8-22 14:34
介个人好像我认识
作者:
joeywr
时间:
2015-8-22 17:09
vipsong 发表于 2015-8-22 13:06
可以参见
嗯嗯 说的很详细
有道理 谢谢了
作者:
收获远眺
时间:
2015-8-22 17:24
看到了才知道
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2