本帖最后由 郑义 于 2012-7-23 16:59 编辑
package linshi;
class Fu {
Fu() {
}
Fu(String name) {
System.out.println("name");
}
Fu(String name, int age) {
System.out.println(name + "" + age);
}
}
class Zi extends Fu {
Zi() { -------------------------------------------------//默认调用父类中的无参构造函数
}
Zi(String name) {-----------------------------------//调用父类中拥有一个参数的构造函数
super(name);
}
Zi(String name, int age) {------------------------//调用父类中拥有两个参数的构造函数
super(name, age);
}
void run() {
System.out.println("run");
}
}
public class FuZiDemo1 {
public static void main(String[] args) {
new Zi("HeMingHui").run();
}
}
在此根据你的提问我说明两点问题:
1、可能是你不知道子类的无参构造函数调用父类中的无参构造函数。
说明:
如果子类中的构造函数没有明确调用父类中的哪个构造函数的时候,都是调用父类的无参构造函数。
拿此例来讲,如果
Zi(String name){}和Zi(String name, int age){}在这两个构造函数中都会调用父类中的无参构造函数。
2、可能你认为子类中java虚拟机会提供给子类一个默认的无参构造函数
说明:
java虚拟机提供默认的无参构造函数只是当你所写的类中没有构造函数的时候,只有此时,java虚拟机才会给此类加上一个默认的无参构造函数。
而你写的类中,你已经在子类中写了有参构造函数,所以此时java虚拟机将不会提供默认的无参构造函数,如果你需要一个无参构造函数,需要手动书写。 |