黑马程序员技术交流社区
标题:
求助一道练习题
[打印本页]
作者:
郑文博
时间:
2012-7-6 17:34
标题:
求助一道练习题
本帖最后由 郑文博 于 2012-7-6 18:54 编辑
class Super
{
int i=0;
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);
}
}
复制代码
这段代码为什么编译失败?
说是父类缺少空参数的构造函数,可是我创建的对象是带有参数的啊。
是不是子类中有一个隐式super(){},必须要到父类中初始化呢?求解。。
作者:
杨朔
时间:
2012-7-6 18:30
这是一道
子类继承父类时的一个必须显式的调用父类的构造函数的问题
在下面两种情况下,子类必须显式的继承父类的构造函数
1. 父类中没有默认的构造函数。
2.父类有默认构造函数,但子类的构造函数不想jvm调用父类默认的那个构造函数
所以你那一道题中的方法改为这样就行了
Test(String s)
{
super(s);
i=2;
}
作者:
姬仁贵
时间:
2012-7-6 18:42
本帖最后由 姬仁贵 于 2012-7-6 18:48 编辑
子类的所有的构造函数,默认的都会访问父类中空参数的构造函数。
因为子子类每一个构造函数内的第一行都有一句隐式super();
当父类没有空参数的构造函数时子类必须手动通过super语句形式来指定要访问父类中的构造函数。
class Super
{
int i=0;
public Super(String s)
{
i=1;
}
}
class Demo extends Super
{
public Demo(String s)
{
super(s);
//显示
通过super语句形式来指定要访问父类中的构造函数
i=2;
}
public static void main(String[] args)
{
Demo d=new Demo("yes");
System.out.println(d.i);
}
}
作者:
万宝东
时间:
2012-7-6 18:42
问题有3点:
1 子类通过new构造方法创建对象,在调用构造方法时,默认执行的第一行是super();即调用父类的无参构造方法。
2. 如果父类没有无参构造方法,系统会调用父类的默认无参构造方法(也就是一个方法体为空的无参构造方法);
3 如果父类存在有参的构造方法同时没有无参构造方法,子类的构造方法就不能调用父类无参构造方法,表现就是编译不能通过。
你的程序中父类
01.class Super
02.{
03. int i=0;
04. public Super(String s)
05. {
06. i=1;
07. }
08.}
有一个带参数的构造方法,这种情况下系统不会自动添加一个无参数,无方法体的构造方法就是super(){}。所以在子类在调用时会出错。
作者:
汤密奕
时间:
2012-7-6 18:55
1、所有子类的构造函数(无参,有参)第一行都默认有一条super()语句调用父类无参构造函数
2、Demo d = new Demo("yes");这句话调用了public Demo(String s),而Demo(String s)又调用了父类的无参数构造函数,父类的无参数构造函数被重载了
3、在class super这个类里添加一个public Super(){},编译即可通过。
作者:
郑庆伟
时间:
2012-7-6 19:09
本帖最后由 郑庆伟 于 2012-7-6 19:26 编辑
需要在父类中写一个构造方法Super(){}
作者:
苟苟
时间:
2015-4-29 08:28
学习了。。。。
作者:
对时间过敏113
时间:
2015-7-30 10:31
:victory:这个我不知道啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2