作者: 江远云 时间: 2012-4-5 15:15
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() 那么,如何才能把下面这个改正确呢,在上面不改动父类的情况下。我对这块有点晕了。
原理:1因为在父类中已经写了构造函数,那默认空参数的构造函数就没有了。2当父类默认的空参数的构造函数不存在时,子类必须手动指定要初始化父类的哪个构造函数。格式
是super(s)。改完结果如下:
class Super
{
int i = 0;
public Super(String s)
{
i=1;
}
}
class Demo extends Super
{
public Demo(String s)
{
super(s);
i = 2;
}
public static void main(String[] args)
{
Demo d = new Demo("yes");
System.out.println(d.i);
}
}作者: 黄或俊 时间: 2012-4-5 15:23
class Super
{
int i = 0;
public Super(String s)
{
i=1;
}
}
class DemoExtends extends Super
{
public DemoExtends(String s)
{
super("yes"); //因为你重写的父类的构造方法,此处默认的是super();
i = 2;
}
public static void main(String[] args)
{
DemoExtends d = new DemoExtends("yes");
System.out.println(d.i);
}
}作者: 李敏 时间: 2012-4-5 15:37
因为 super(); 子类中的构造方法的第一行都是 super()隐式初始化。