黑马程序员技术交流社区
标题:
求解答
[打印本页]
作者:
Zhang_qian
时间:
2012-5-10 21:19
标题:
求解答
下面的程序谁帮忙给改一下为什么编译不能通过
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);
}
}
作者:
刘旭
时间:
2012-5-10 21:41
改进方法:
1、在子类构造器中第一行加一句 super(s);
2、为父类定义无参构造器。
知识点解答:
当通过new 关键字创建子类对象时,虚拟机会先调用父类构造器。当子类没有显示调用父类构造器时,子类默认调用父类的默认构造器(即无参构造器)。然而,当父类定义了自己的构造器时,系统不会为类创建默认构造器,此时,子类没有显示调用父类构造器时,就会出错。因此,定义父类时,最好要定义无参构造器。
问题程序改进方案:
作者:
杨威
时间:
2012-5-10 21:42
本帖最后由 杨威 于 2012-5-10 21:48 编辑
构造函数问题
子类构造函数第一行隐含语句super(),而你的父类中没有空参数的构造函数,故编译不通过
原因是子类在初始化时先到父类初始化,然后在自己的构造函数中初始化,也可以在子类构造函数第一行手动显示语句父类带参数的构造语句。
在父类中加上空参数的改正方法,代码如下:
class Super
{
int i=0;
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);
}
}
复制代码
作者:
刘旭
时间:
2012-5-10 21:42
改进方法:
1、在子类构造器中第一行加一句 super(s);
2、为父类定义无参构造器。
知识点解答:
当通过new 关键字创建子类对象时,虚拟机会先调用父类构造器。当子类没有显示调用父类构造器时,子类默认调用父类的默认构造器(即无参构造器)。然而,当父类定义了自己的构造器时,系统不会为类创建默认构造器,此时,子类没有显示调用父类构造器时,就会出错。因此,定义父类时,最好要定义无参构造器。
问题程序改进方案:
作者:
杨鹏
时间:
2012-5-10 21:45
一、构造函数的问题,在定义一个类的时候,如果没有写出构造函数,系统会默认提供无参的构造方法,一旦定义了有参的构造方法,系统就不会提供无参的构造方法。
二、子类继承父类,在子类的构造方法中如果不指定需要调用的父类的构造方法,系统会默认调用父类无参的构造方法,也即是在子类构造方法中第一条语句默认是super()。就像楼主提供的代码中Demo类中的构造方法没有指定需要调用的其父类Super的构造方法,此时系统会在Demo的构造方法中默认调用Super类中的无参构造方法,而父类Super()已经给出有参的构造函数,系统就不会提供无参的构造,就找不到父类Super的无参构造,所以会报错。只需要在父类Super中添加无参构造方法即可解决问题。
一般在定义类的时候如果定义了有参的构造方法,也会把无参的构造方法也给定义了,这样方便子类创建对象时使用。
作者:
黄坚声
时间:
2012-5-10 22:07
class Demo extends Super
{
public Demo(String s)
{
i=2; //这里应该写成:super.i=2;
}
public static void main(String[] args)
{
Demo d=new Demo("yes");
System.out.println(d.i);
}
}
你按照我说的方法试试看吧。
作者:
黄坚声
时间:
2012-5-10 22:07
class Demo extends Super
{
public Demo(String s)
{
i=2; //这里应该写成:super.i=2;
}
public static void main(String[] args)
{
Demo d=new Demo("yes");
System.out.println(d.i);
}
}
你按照我说的方法试试看吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2