自己试一下就清楚了 class A { public A() { System.out.println("A class"); } }public class B extends A { public B() { System.out.println("B class"); } public static void main(String[] args) { new B(); } }
如果阅读过Thinking in Java的兄弟,应该知道:子类虽然没有继承父类的构造函数,但是在初始化的时候,会在子类的构造函数之前,先加载父类的构造函数。 class B{ B(){ System.out.println("B()"); } } class C extends B{ C(){ System.out.println("C()"); }public class A{ public static void main(String[] arg){ new C(); } }显示结果表示: B() C()
class A {
public A() {
System.out.println("A class");
}
}public class B extends A {
public B() {
System.out.println("B class");
} public static void main(String[] args) {
new B();
}
}
class B{
B(){
System.out.println("B()");
}
}
class C extends B{
C(){
System.out.println("C()");
}public class A{
public static void main(String[] arg){
new C();
}
}显示结果表示:
B()
C()
我没看过张孝祥的培训教程,从楼主的疑问来看,我觉得应该是,父类的缺省构造函数在子类初始化时会被自动调用来完成相应的父类对象初始化,而带参数的构造函数则必须用super来调用
我总习惯在每个类的构造函数里写上super()