日期:2014-05-20  浏览次数:20611 次

一个关于构造函数的笔试题
class A{
A(int i){

}
}
class B extends A{

}


A、Compile-time error at 5. 
B、Compile-time error at 1. 
C、The compiler attempts to create a default constructor for class B. 
D、The compiler attempts to create a default constructor for class A.

能说说为什么么?

------解决方案--------------------
A把
继承父类,就必须继承父类的构造方法。

------解决方案--------------------
B 的构造函数跟父类不一样 怎么创建父类?

------解决方案--------------------
答案应该是A.
原因是因为子类B中没有定义构造方法,那么就会有一个默认的无参构造方法,我们知道,在创建子类对象的时候,会调用父类的构造方法无参构造方法,因为A类定义了一个带参数的构造方法,所以无参构造方法被覆盖了,所以在第5行会报A类中没有无参构造方法。
只要给A定义一个无参构造方法就行了。
------解决方案--------------------
报错了!实例化B对象的时候需要有一个父类A的无参构造函数。第五行报错。
------解决方案--------------------
你的子类中没有显示调用父类的构造方法,你这个B类就会调用父类默认的“可访问的无参的构造方法”。由于你的A类没有这个方法。所以直接报错。选D。
------解决方案--------------------
引用:
你的子类中没有显示调用父类的构造方法,你这个B类就会调用父类默认的“可访问的无参的构造方法”。由于你的A类没有这个方法。所以直接报错。选D。

手误 选A。




引用:
答案是A和C,忘记说明是多选了

C不对吧 B extends A{ } 这已经报错了。 如果是“attempts to create”即试图创建也肯定先创建父类对象,怎么说都不能能直接创建B。
------解决方案--------------------
给A显式创建缺省值构造函数 或者在B中创建创建public B(int i){super(i);}都可以

------解决方案--------------------
选A,经常遇到,不知道原因
------解决方案--------------------
引用:
答案应该是A.
原因是因为子类B中没有定义构造方法,那么就会有一个默认的无参构造方法,我们知道,在创建子类对象的时候,会调用父类的构造方法无参构造方法,因为A类定义了一个带参数的构造方法,所以无参构造方法被覆盖了,所以在第5行会报A类中没有无参构造方法。
只要给A定义一个无参构造方法就行了。


+1