本帖最后由 不想飞不到 于 2014-8-9 00:48 编辑
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);
}
}
//编译失败,因为父类中缺少空参数的构造函数。
//或者子类应该通过super语句指定要调用的父类中的构造函数。(这句是什么意思,能有例子解释么?)
问:为什么要在继承时显式写出父类空参数构造函数?不是默认就有空参数构造函数么? 通过查资料找到的,给大家分享一下
当我们创建一个类的时候,如果我们没有创建一个构造方法(哪怕是无参数的)。JVM会帮助我们创建一个默认的构造方法,也称为无参构造方法。但是如 果我们创建一个构造方法时,JVM就不会再为我们生成一个默认的构造方法。有时有必要的显示的写出这个默认构造函数,也就是无参构造函数。所以当这 个类被继承时,子类就会默认的调用这个无参构造方法。
如果你想显示的调用父类的构造方法,可以使用super()在子类的构造方法中的第一句。(构造方法中只能调用构造方法一次)。如果你在父类中没有写 无参构造方法,那么在子类的构造方法中必须显示的调用父类中的有参数的构造方法(写在第一句)。
|