本帖最后由 周刚 于 2012-7-4 22:31 编辑
回答朋友提问的时候发现了一个很基础,却以前始终理解错误的问题:
class A {
public A() {
System.out.println("hello,I'm empty constructor in class A!");
}
public A(int num) {
System.out.println("hello,I 'm Constructor with num=" + num + " as parameter in class A");
}
}
public class B extends A {
public B(int num) {
System.out.println("hello,I'm Constructor with num=" + num+" as parameter in class B!");
}
public static void main(String[] args) {
B b = new B(5);
}
}
上面代码,B中的构造方法覆盖了父类中的带参数的构造方法。之前我以为子类用带参数的构造函数创建对象时会先调用父类
中带参数的构造方法,但事实上我错了:不会调用父类中带参数的构造方法,还是会调用父类中无参数
的构造方法!!!!!!这对我来说是个很大的意外,记录在这里,同时分享给不知道的朋友。
网上找到下面一段描述:
“这是一种规范! 当你没有编写 构造函数时,会默认一个 无参的构造函数! 当你编写带参的构造函数时! 就没有默认了! 所以 必须显示的编写! 而且当你new 子类时! 编译器 也是先进入父类的无参构造函数! 子类 无参 构造函数你可以注释掉! 但是当你再 main 里面 new 子类时 不带参就会报错了!”
|