黑马程序员技术交流社区
标题:
构造函数的问题
[打印本页]
作者:
q798500920
时间:
2015-4-13 14:55
标题:
构造函数的问题
class Super
{
int i=0;
public Super()
{
}
public Super(String s)
{
i=1;
}
}
class Demo extends Super
{
public Demo(String s)
{
i=2;
}
public static void main(String[] args)
{
Demo d=new Demo("yes");
System.out.println(d.i);
}
}
复制代码
求解答,最后的运行结果是什么,并具体分析下!
作者:
cody
时间:
2015-4-13 17:36
请问楼主是用什么软件写程序的?
作者:
q798500920
时间:
2015-4-13 19:28
cody 发表于 2015-4-13 17:36
请问楼主是用什么软件写程序的?
记事本啊,还能有啥
作者:
谷歌
时间:
2015-4-13 19:39
主函数执行,Demo d=new Demo("yes");调用Demo类中的构造方法Demo(String s)。一看需要i,在Demo类中没有找到i。一个super指向,找到Demo父类中的i,将i这个成员变量赋值为2。构造方法执行完毕。打印d.i。在Demo类中没找到i,一个super指向,找到父类中的i。此成员变量i之前已被赋值为2,打印2。结果为2
作者:
lzh2015
时间:
2015-4-13 19:52
好像出现了死语句,哥们跟自己玩起来了
作者:
pengcheng0328
时间:
2015-4-13 20:23
把主函数写到子类里面了
正常的运行过程是
21,22----->15,16----->04,05,06,07----->17,18
最后的结果是2
作者:
于先森
时间:
2015-4-13 20:26
打印结果是:1
作者:
showdy
时间:
2015-4-13 21:23
本帖最后由 showdy 于 2015-4-13 21:24 编辑
子父类的初始化是分层进行的,先父类初始化,后子类初始化。
21----15---16---04---03---05--06--07-----17---22
结果为2
作者:
奔放的龙小胖
时间:
2015-4-13 21:24
lzh2015 发表于 2015-4-13 19:52
好像出现了死语句,哥们跟自己玩起来了
死语句!?求解,我是没看出来的
作者:
奔放的龙小胖
时间:
2015-4-13 21:32
打印结果:2
程序首先加载的是main方法的主函数,再往下走,遇到子类Demo new了一个对象d同时实现带参的构造方法,马上d就上去找Demo里面带参的构造方法,因为Demo是继承了Super类,所以在Demo类的带参构造方法中第一行有一条隐式的super语句指向了父类Super中的带参构造方法(父类Super中的无参会优先执行,但此题中不影响),此时成员变量的值为1,然后程序再往下走完成Demo类中的带参构造方法,i被赋值为2.所以在输出语句中 d.i会输出2.
个人见解,见谅
作者:
dsqqg
时间:
2015-4-13 22:14
:handshake 看有回复什么的都有!!!
作者:
燕赵之风
时间:
2015-4-13 22:15
最终运行结果是2.分析:你在main里创建了一个子类对象,并调用了子类的构造函数。但是不论子类构造函数如何变化,默认第一行都有一条隐式语句super();除非你手动调用父类的其他构造函数,否则这个语句会自动调用父类中的空参数构造函数,执行完父类的空参数构造函数后,顺序执行子类构造函数中的代码,i被赋值为2.当你在主函数中打印时,自然打印2出来。
作者:
刘潘敏
时间:
2015-4-13 22:31
是2,先执行父类的空参构造方法,再执行子类的
作者:
呐拽
时间:
2015-4-13 22:39
我个人觉得结果是2,但是没有执行父无参构造,因为你调用的是有参数的构造方法怎么会调用无参构造呢?
作者:
星之钥匙
时间:
2015-4-13 22:40
都没有结果,不能这样写啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2