继承的进一步研究
1.子类对象的实例化过程
在继承操作中,对于子类对象的实例化也是有要求的,即子类对象在实例化之前必须首先调用父类的构造方法后在调用子类自己的构造方法。
提示: 子类实例化的过程与生活很类似。、
在实际生活中肯定是要先有父母之后才能有孩子,孩子不可能凭空蹦出来。对于程序也是一样,之所以会调用父类中的构造方法,就是要用父类的构造方法为父类中的属性初始化,就表示先有父类实例,然后才能产生子类实例。
例子:
package test1; class Person{ private String name; private int age; public Person(){ System.out.println("父类Person中的构造"); } public String getName(){ return name; } public void setName(String name){ this.name=name; } public int getAge(){ return age; } public void setAge(int age){ this.age=age; } } class Student extends Person{ private String school; public Student(){
super();//加不加次愈发效果相同 System.out.println("子类的构造函数"); } public String getSchool(){ return school; } public void setSchool(String school){ this.school=school; } } public class InstanceDemo { public static void main(String args[]){ Student stu=new Student(); stu.setName("张三"); stu.setAge(30); stu.setSchool("清华大学"); System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge()+",学校:"+stu.getSchool()); } }
结果:
父类Person中的构造
子类的构造函数
姓名:张三,年龄:30,学校:清华大学
子类对象在实例化之前会先默认调用父类中的构造方法,就好像没有没有父亲就没有孩子,所以在实例化子类对象前需要将父类中的属性进行初始化。当然,对于以上的代码实际在子类的构造方法中隐含了一个super()的语法,super表示超级的意思,在一些书中也喜欢把父类成为超类,以上的语法就是表示子类可以直接使用super()调用父类中的无参构造。