黑马程序员技术交流社区
标题:
函数的问题
[打印本页]
作者:
黑马李文
时间:
2013-7-31 00:12
标题:
函数的问题
本帖最后由 黑马李文 于 2013-7-31 21:49 编辑
函数运行的结果是:
A、子类无参构造函数 子类有参构造函数 父类无参构造函数
B、子类有参构造函数 子类无参构造函数 父类无参构造函数
C、父类无参构造函数 子类有参构造函数 子类无参构造函数
D、父类有参构造函数 子类有参构造函数 子类无参构造函数
public class Test
{
public static void main(String [] args)
{
Child c = new Child();
}
}
class Father
{
public Father()
{
System.out.println("父类无参构造函数");
}
public Father(String name)
{
System.out.println("父类有参构造函数");
}
}
class Child extends Father
{
public Child()
{
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name){
super("dd");
System.out.println("子类有参构造函数");
}
}
复制代码
作者:
xuaner0719
时间:
2013-7-31 00:36
本帖最后由 xuaner0719 于 2013-7-31 21:16 编辑
Child c = new Child();
函数走向
首先执行子类中的无参构造函数。
public Child()
{
this("dd");//调用本类的有参函数
System.out.println("子类无参构造函数");
}
就是
public Child(String name){
super("dd"); //调用父类中的有参函数 ,
System.out.println("父类有参构造函数");
System.out.println("子类有参构造函数");
}
回到子类无参函数
System.out.println("子类无参构造函数");
QQ截图20130731003708.jpg
(10.57 KB, 下载次数: 0)
下载附件
2013-7-31 00:36 上传
作者:
黑马李昂
时间:
2013-7-31 01:04
D、父类有参构造函数 子类有参构造函数 子类无参构造函数
详解:
Child c = new Child();
1.首先执行子类中的无参构造函数。
2.运行this("dd");调用子类本类有参的函数。
3.运行super("dd");调用父类有参构造函数。
4.执行System.out.println("父类有参构造函数");
5.回到子类有参构造函数执行System.out.println("子类有参构造函数");
6.回到子类无参构造函数执行System.out.println("子类无参构造函数");
希望与楼主共同探讨{:soso_e100:}
作者:
Mr_Free
时间:
2013-7-31 02:19
本帖最后由 Mr_Free 于 2013-7-31 07:38 编辑
答案应该是d ;
因为你定义的 是Child c = new Child();
所以调用的 是child里面的空参数构造函数,在空参数构造函数里面第一句就是this("dd");这里访问子类的Child(String name)构造函数,
然后我们调用Child(dd)进去之后发现他第一句是super("dd");这里访问的是父类的 public Father(String name)构造函数,
然后我们调用Father("dd"),执行system.out.println("父类有参构造函数");之后在会过来执行Child(dd)里的 System.out.println("子类有参构造函数");
最后在执行 System.out.println("子类无参构造函数");
话说楼主就贴了个代码,也不知道你哪里有问题。。
作者:
の放下执著
时间:
2013-7-31 05:53
D、父类有参构造函数 子类有参构造函数 子类无参构造函数
注解:
1:但在主函数中执行Child c = new Child();时,就创建一个对象,这时就调用了子类Child的无参构造函数Child()。
2:当在无参构造函数Child()中执行this("dd")时;就调用了子类有参构造函数Child(String name)。this(“dd”)这叫构造函数之间的平行调用。
3:在有参构造函数Child(String name)中执行super("dd");时,就调用了父类的有参构造函数public Father(String name)。其实在默认的情况下,
子类构造函数的第一行都用super()语句,默认先调用父类中的无参构造函数。
所以答案是D。
作者:
田磊阳
时间:
2013-7-31 09:47
本帖最后由 田磊阳 于 2013-7-31 09:50 编辑
上面讲得很明白了,我就补充一点
构造函数中,子类隐式的super()函数和this()构造函数平行调用不能同时出现,这是java的一个运行机制,简单点说就是this()平行调用要求放在第一行,super()隐式函数也是要求放在第一行,这样两个函数会打架的,哈哈,所以有了this()后,隐式的super()就不会出现了~~~
<p>public Child()
{
//super();有了this()了,super()就没了
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name)</p><p>{
super("dd");
System.out.println("子类有参构造函数");
}
</p>
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2