class SuperDemo{
private String name ;
public SuperDemo(){
System.out.println("超类的 无 参数的构造函数");
}
public SuperDemo(String name){
System.out.println("超类的 有 参数的构造函数");
}
}public class ExtendsContract extends SuperDemo {
public ExtendsContract(){
super();//调用的是有哪个?
System.out.println("子类 无 参数的构造函数 ");
} public ExtendsContract(String name){
//super();//调用哪个?
System.out.println("子类 有 参数的构造函数 ");
}
public static void main(String[] args) {
ExtendsContract ec1 = new ExtendsContract();
ExtendsContract ec2 = new ExtendsContract("Tom");
}}
输出结果很奇怪。可以把super()前面//去掉
但是输出结果也很奇怪
private String name ;
public SuperDemo(){
System.out.println("超类的 无 参数的构造函数");
}
public SuperDemo(String name){
System.out.println("超类的 有 参数的构造函数");
}
}public class ExtendsContract extends SuperDemo {
public ExtendsContract(){
super();//调用的是有哪个?
System.out.println("子类 无 参数的构造函数 ");
} public ExtendsContract(String name){
//super();//调用哪个?
System.out.println("子类 有 参数的构造函数 ");
}
public static void main(String[] args) {
ExtendsContract ec1 = new ExtendsContract();
ExtendsContract ec2 = new ExtendsContract("Tom");
}}
输出结果很奇怪。可以把super()前面//去掉
但是输出结果也很奇怪
public SuperDemo(){
System.out.println("超类的 无 参数的构造函数");
} 这个构造函数。
private String name; public SuperDemo() {
System.out.println("超类的 无 参数的构造函数");
} public SuperDemo(String name) {
System.out.println("超类的 有 参数的构造函数");
}
}public class ExtendsContract extends SuperDemo { public ExtendsContract() {
super();// 调用的是有哪个?
System.out.println("子类 无 参数的构造函数 ");
} public ExtendsContract(String name) {
//子类构造器会默认调用父类的无参构造器,如果父类没有无参构造器,子类构造器里必须显示的调用,否则编译出错。
//super();//调用哪个?
//加这个你试试...会有新鲜感的!
super(name);
System.out.println("子类 有 参数的构造函数 ");
} public static void main(String[] args) {
ExtendsContract ec1 = new ExtendsContract();
ExtendsContract ec2 = new ExtendsContract("Tom"); }}
同意,如果没有显示写super(),他会自动调用无参数的父类构造,如果调用super(a,b)会调用父类
有相关参数的构造