一 概述
继承是类与类之间的一种关系。通过extends关键字,让子类拥有父类的属性和方法。
格式:子类名 extends 父类名
二 代码实现
1 定义父类Student
创建一个学父类——学生类Student0216,写上这个类的属性name和方法eat以及showInfo
2 定义子类UNStudent0216
在没有继承之前,Student0216和UNStudent0216是没有任何关系的
3 实现继承
此时已经实现了继承,父类Student0216中的属性和方法不需要在子类UNStudent0216中重新定义,只需要写子类自己的属性即方法即可。对于这个例子就是name属性和eat 以及showInfo方法不用再定义。
写子类自己独有的属性CET4Score和方法showCET4Score
这里没有定义父类的属性name,但是继承之后UNStudent0216类也可以调用name如下
继承的优点:
1可以减少代码的重复,实现代码复用。子类和父类相同的属性和方法可以子类直接继承不用再重新写代码。常用在人员管理系统
2继承之后,子类可以实现在父类的基础上扩展程序,包括定义自己的属性和方法,以及重写父类的方法
4 方法的重写
也就是在子类中重新定义父类中的方法。规则:必须和父类的方法同名同参。除了方法体,其他都是相同的。一定要先将父类的方法直接复制到子类中。
现在重写父类中的showInfo方法
创建主函数类,并创建对象测试以上代码
unStudent0216是子类UNStudent0216的对象
子类的对象可以调用以下
1 子类独有的方法showCET4Score
2 父类Student0216的继承的属性name和方法eat
3 子类重写的方法showInfo——优先调用重写后的方法
对于父类的对象student0216,是无法调用子类重写的方法的
super关键字:在子类中指代父类。重写方法体中子类和父类重复的部分直接用super.方法;取代。
比如父类的showInfo方法体中的这一句是在子类重写方法体中重复的
可以把这中重复的代码换成super.showInfo();
三 类与类之间的转型问题
1对象的类型
一个对象可以是多种类型,首先是自己的类,其次也是自己的类继承的父类的类型
2父类与子类的转型
(1)自动转型
子类的对象可以自动转为父类的对象,且转型之后不能调用子类独有的方法和属性,但是重写的方法还是可以调用的
可以看出Stu2虽然是父类对象,但是是从子类自动转型来的,所以调用showInfo依然可以调用重写的方法
自动转型的优点:便于对象的管理和存储。原先每个子类对象的信息都要存在各自子类对象的类型的数组中,当这些子类有了共同的父类,就可以用父类类型的数组存储所有子类的对象。
例如父类是Stu,子类有Stu1,Stu2,Stu3。
Stu[] stu;
Stu1[] stu1;
Stu2[] stu2; 可以存储以上两种类型
(2)强制转型
首先,强制转换是不安全的。其次强制转换有个前提:要进行强制转型的对象,必须是从子类对象自动转型为父类后的对象。
子类——>自动转为——>父类——>强制转为——>子类
例如:
子类1——>父类——>子类1 是可以的
子类1——>父类——>子类2 不可以
父类——>子类 也不可以
stu1是父类对象,强制转换为子类对象是不安全的。这个stu3依然可以调用独有的属性方法以及重载的方法