先看看我的理解再回答,首先super必须写在子类的构造函数中第一行.这个我懂ok,其实super可以重载.也就是说可以调用父类带参数的构造函数.其三.在子类创建对象时,首先会调用父类的构造方法.Ok这我也明白.但接下来这程序我就不明白了.我创建一个子类对象.调用了子类中无参的构造方法,而这个子类无参构造方法中第一行我已经显示调用了super(300);这说明我要调用父类带参数的构造方法.子类中带参数的构造方法我根本没调.他怎么也会自动去找父类那个无参的构造方法呢???这是规定的吗?还是其它什么原因??????
class SuperClass {
private int n;
/*
SuperClass() {
System.out.println("11");
}
*/
SuperClass(int n) {
System.out.println("22");
this.n = n;
}
}class SubClass extends SuperClass {
private int n;
SubClass(int n) {
System.out.println("33");
this.n = n;
} SubClass() {
super(300);
System.out.println("44");
}
}public class TextSuperSub {
public static void main(String []args) {
SubClass sc1 = new SubClass();
//SubClass sc2 = new SubClass(400);
}
}
class SuperClass {
private int n;
/*
SuperClass() {
System.out.println("11");
}
*/
SuperClass(int n) {
System.out.println("22");
this.n = n;
}
}class SubClass extends SuperClass {
private int n;
SubClass(int n) {
System.out.println("33");
this.n = n;
} SubClass() {
super(300);
System.out.println("44");
}
}public class TextSuperSub {
public static void main(String []args) {
SubClass sc1 = new SubClass();
//SubClass sc2 = new SubClass(400);
}
}
换句话说 只有当父类只有一个默认的构造方法(无参的)时 子类的构造方法不用super 不知道这样说能否明白
看这篇帖子就明白了http://topic.csdn.net/u/20110310/13/38d023a2-6601-46a6-84f7-2c7db6fdabfa.html