本帖最后由 刘海陆 于 2013-5-20 00:28 编辑
有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?
网上的答案大概是这个样子的:
class Person
{
Person()
{
System.out.println("Person Constrcution run");
}
}
class Student extends Person
{
Student()
{
System.out.println("Student Constrcution run");
}
}
class GoodStudent extends Person
{
GoodStudent ()
{
System.out.println("GoodStudent Constrcution run");
}
}
但是,本人感觉这样不对, 因为题干上说了,这三个类只有默认的构造函数,但是上面已经自定义了构造函数,就与题干矛盾了.
大家帮忙看看我做的对不对,我是这样理解的:因为构造代码块会优先于构造函数执行,所以在每个类中都添加一个构造代码块,
这样如果默认父类构造函数执行的话,就会先执行父类的构造代码块.所以我们可以根据构造代码块来判断,在构造代码块中加入
输出语句,这样就可以判断构造函数执行了.
class Person
{
{
System.out.println("Person的构造代码块执行了,所以他的默认构造函数也执行了");
}
}
class Student extends Person
{
{
System.out.println("Student的构造代码块执行了,所以他的默认构造函数也执行了");
}
}
class GoodStudent extends Person
{
{
System.out.println("GoodStudent的构造代码块执行了,所以他的默认构造函数也执行了");
}
}
|