class Fu
{
Fu(){}——————————1
Fu(String name)
{
System.out.println("name");
}
Fu(String name int age)
{
System.out.println(name+""+age);
}
}
class Zi extends Fu
{
Zi(){}————————2
Zi(String name)——————3
{
super(name);
}
Zi(String name int age)
{
super(name age);
}
void run()
{
System.out.println("run");
}
}
class FuZiDemo1
{
public static void main(String[] args)
{
new Zi("HeMingHui").run();
}
}
上述程序中,如果只写子类的默认函数,而不写父类默认的函数,则程序不能通过。我有点想不同,我认为子类集成父类时我已经通过Zi("HeMingHui")将父类初始化了啊,是不是我在运行3的时候2也要跟着运行啊,
而且我发现父类的构造函数只可能比子类的多而不能少,这是为什么,难到我总结错误了作者: 康大玮 时间: 2012-7-23 14:55
new Zi("HeMingHui").run();
java虚拟机执行这句话的时候,
1,new Zi("HeMingHui")
也就是Zi(String name)——————3
{
super(name);
}
里面有调用父类的构造方法
所以首先调用
Fu(String name)
{
System.out.println("name");
}
所以结果为
name
run作者: 李菁 时间: 2012-7-23 16:18
class Fu
{
Fu(){}——————————1
Fu(String name)
{
System.out.println("name");
}
Fu(String name int age)
{
System.out.println(name+""+age);
}
}
class Zi extends Fu
{
Zi(){}————————2执行子类的无参构造方法,必须先走父类的无参构造方法,所以不能只写子类默认构造函数
Zi(String name)——————3执行子类的这个构造方法,要先执行父类的Fu(String name)构造方法
{
super(name);
}
Zi(String name int age)
{
super(name age);
}
void run()
{
System.out.println("run");
}
}
class FuZiDemo1
{
public static void main(String[] args)
{
new Zi("HeMingHui").run();
}
} 作者: 乐峰 时间: 2012-7-23 16:36
class Fu
{
Fu(){ super();}——————————1所以这里出现的父类无参构造函数要显示的存在
Fu(String name)
{
System.out.println("name");
}
Fu(String name int age)
{
System.out.println(name+""+age);
}
}
class Zi extends Fu
{
Zi(){super();}————————2子类显示的调用了无参构造函数,其内部隐式调用了父类的无参构造函数,这就要求父类必须要显示调用无参构造函数
Zi(String name)——————3)调用的是这个构造函数,这个构造函数显示的调用了父类构造函数
{
super(name);
}
Zi(String name int age)
{
super(name age);
}
void run()
{
System.out.println("run");
}
}
class FuZiDemo1
{
public static void main(String[] args)
{
new Zi("HeMingHui").run();在主函数运行的子类是子类有参构造函数
}
} 作者: 郑义 时间: 2012-7-23 16:57 本帖最后由 郑义 于 2012-7-23 16:59 编辑