黑马程序员技术交流社区

标题: 为什么父类Base一定要无参构造器? [打印本页]

作者: 党传才    时间: 2012-3-27 10:47
标题: 为什么父类Base一定要无参构造器?
练习16:给出以下代码,请问哪些Base类的构造器是必须在Base类中声明的?
public class Check extends Base {
public Check(int j) {
}
public Check(int j, int k) {
super(j, k);
}
}
请选择所有正确答案:
(1) Base() { }
(2) Base(int j) { }
(3) Base(int j, int k) { }               ……………………..
(4) Base(int j, int k, int 1) { }

答案为13


作者: 张立江    时间: 2012-3-27 10:52
public Check(int j) {
}
里面有一句隐形的 super();  
调用的是Base的无参构造函数
而Base必须定义它


作者: lipanfeng    时间: 2012-3-27 10:58
如果类中没有带参数的构造函数或者没有写无参的构造函数,系统会默认有个无参的构造函数。所以无参的构造函数是无论如何都会有的
作者: 李井山    时间: 2012-3-27 10:58
第二个显示的调用了 super的构造方法,第一个是隐形的调用了 super()
作者: 张明星    时间: 2012-3-27 11:47
所有子类构造函数中都会去调用父类构造函数,或者super(参数)调用,或者默认调用super() 。如果父类中没有定义构造函数,那么会默认一个空参数构造函数;定义了带参数的构造函数,就不会默认初试化一个空参数的构造函数。
这个题目中,public Check(int j, int k) { super(j, k); }   这句super(j, k); 说明父类存在带参数(j,k)的构造函数,父类就不会默认空参数的构造函数
而 public Check(int j) { }中隐含super(),需要调用父类空参数构造函数;   这时候父类就必须声明无参数的构造函数了!因此(1)入选






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2