今日内容
三大特性——继承
方法重写
super关键字
this 关 键 字
抽象类
教学目标
能够解释类名作为参数和返回值类型
能够写出类的继承格式
能够说出继承的特点
能够说出子类调用父类的成员特点
能够说出方法重写的概念
能够说出super可以解决的问题
描述抽象方法的概念
写出抽象类的格式写出抽象方法的格式
能够说出父类抽象方法的存在意义
能够完成发红包案例的代码逻辑
第一章 继承
1.1概述
由来
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要 继承那一个类即可。如图所示:
![d313a5b9ff26b2d06f71678eb5a2073e.png](https://img-blog.csdnimg.cn/img_convert/d313a5b9ff26b2d06f71678eb5a2073e.png)
其中,多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者基类。
继承描述的是事物之间的所属关系,这种关系是:is-a的关系。例如,图中兔子属于食草动物,食草动物属于动
物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。
定义
继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。
好处
1.提高代码的复用性。
2.类与类之间产生了关系,是多态的前提。
1.2继承的格式
通过extends关键字,可以声明一个子类继承另外一个父类,定义格式如下:
class 父 类 {...}class 子 类 extends 父 类 {...}
继承演示,代码如下:
/** 定义员工类Employee,做为父类*/class Employee {String name; // 定义name属性// 定义员工的工作方法public void work() { System.out.println("尽心尽力地工作");}}/** 定义讲师类Teacher 继承 员工类Employee*/class Teacher extends Employee {// 定义一个打印name的方法public void printName() { System.out.println("name=" + name);}}/** 定义测试类*/public class ExtendDemo01 {public static void main(String[] args) {// 创建一个讲师类对象Teacher t = new Teacher();// 为该员工类的name属性进行赋值t.name = "小明";// 调用该员工的printName()方法t.printName(); // name = 小 明// 调用Teacher类继承来的work()方法t.work(); // 尽心尽力地工作}}
1.3继承后的特点——成员变量
当类之间产生了关系后,其中各类中的成员变量,又产生了哪些影响呢?
成员变量不重名
如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。代码如下:
class Fu {// Fu中的成员变量。int num = 5;}class Zi extends Fu {// Zi中的成员变量int num2 = 6;// Zi中的成员方法public void show() {// 访问父类中的num,System.out.println("Fu num="+num); // 继承而来,所以直接访问。// 访问子类中的num2System.out.println("Zi num2="+num2);}}class ExtendDemo02 {public static void main(String[] args) {// 创建子类对象Zi z = new Zi();// 调用子类中的show方法z.show();}}演示结果: Fu num = 5 Zi num2 = 6
成员变量重名
如果子类父类中出现重名的成员变量,这时的访问是有影响的。代码如下:
class Fu {// Fu中的成员变量。int num = 5;}class Zi extends Fu {// Zi中的成员变量int num = 6;public void show() {// 访 问 父 类 中 的 num System.out.println("Fu num=" + num);// 访问子类中的numSystem.out.println("Zi num=" + num);}}c