A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 党传才 中级黑马   /  2012-3-27 10:47  /  3266 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

练习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

4 个回复

正序浏览
所有子类构造函数中都会去调用父类构造函数,或者super(参数)调用,或者默认调用super() 。如果父类中没有定义构造函数,那么会默认一个空参数构造函数;定义了带参数的构造函数,就不会默认初试化一个空参数的构造函数。
这个题目中,public Check(int j, int k) { super(j, k); }   这句super(j, k); 说明父类存在带参数(j,k)的构造函数,父类就不会默认空参数的构造函数
而 public Check(int j) { }中隐含super(),需要调用父类空参数构造函数;   这时候父类就必须声明无参数的构造函数了!因此(1)入选

回复 使用道具 举报
第二个显示的调用了 super的构造方法,第一个是隐形的调用了 super()
回复 使用道具 举报
如果类中没有带参数的构造函数或者没有写无参的构造函数,系统会默认有个无参的构造函数。所以无参的构造函数是无论如何都会有的
回复 使用道具 举报
public Check(int j) {
}
里面有一句隐形的 super();  
调用的是Base的无参构造函数
而Base必须定义它

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马