java Person,Student,GoodStudent 三个类的继承、构造函数的执行
有这样三个类,Person,Student,GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数(我也不知道什么情况下不会去调用,如果都是默认无参构造函数的话),那么采用什么样的手段可以调用父类的构造函数?
一、需要分析
1、Person,Student,GoodStudent三个类的继承关系
2、实现三个class的构造函数
3、打印信息查看各个类的构造函数是否被调用
二、技术点
1、弄清楚Java类的无参构造函数是默认调用的
2、如果父类的构造函数是有参的,那么要在子类的构造函数的第一行加入super(args);来确认对哪个父类构造函数的调用
代码:
packagecom.itheima;
/**
*9、
*有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,
*三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,
*在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数
*,那么采用什么样的手段可以调用父类的构造函数?
*
*@author281167413@qq.com
*/
publicclassTest9{
publicstaticvoidmain(String[]args){
Students1=newStudent();
System.out.println("-------------------------------");
Students2=newStudent();
System.out.println("-------------------------------");
GoodStudentg1=newGoodStudent();
System.out.println("-------------------------------");
}
}
classPerson{
Person(){
System.out.println("I'mPerson!");
}
Person(Stringarg){
System.out.println(arg);
}
Person(Stringarg1,Stringarg2){
System.out.println(arg1+arg2);
}
}
classStudentextendsPerson{
Student(){
super("havearg!");//
System.out.println("I'mStudent!");
}
Student(Stringarg){
super("havearg!","inPerson");
System.out.println(arg);
}
}
classGoodStudentextendsStudent{
GoodStudent(){
super("fromGoodStudent!");
System.out.println("I'mGoodStudent!");
}
}
打印构造函数的调用过程:
havearg! I'mStudent! ------------------------------- havearg! I'mStudent! ------------------------------- havearg!inPerson fromGoodStudent! I'mGoodStudent! -------------------------------