继承 抽象类 学生信息系统代码优化
一、继承
1、定义:类与类之间产生关系,即子父类关系
2、格式:public class 子类名 extends 父类名{}
3、父类又称:基类、超类
4、子类又称:派生类
5、使用条件:类与类之间存在共性内容,产生is a的关系,考虑使用继承
6、note:java只支持单继承,不支持多继承,但支持多层继承
7、单继承:子类只能继承一个父类,不能同时继承多个父类
8、多层继承:子类A继承父类B,父类B可继承父类C
€1 单继承和多层继承练习:
二、继承关键字this、super以及成员访问特点
this:限定指本类成员
super:限定指父类成员
1、成员变量访问特点:
子类方法中访问一个变量:子类局部范围查找—子类成员范围查找—父类成员范围查找
note:子父类出现重名变量时,就近原则优先访问子类中的,要想用父类变量需要super限定
€2 this和super使用练习(此处省略创建对象打印变量过程)
2、成员方法访问特点:子类成员范围查找—父类成员范围查找
€3 继承体系中,成员方法调用练习
3、方法重写:继承体系中,子类出现和父类一模一样的方法声明
应用场景:子类需要父类功能,功能主题有子类自己特有内容,此时可重写父类中的方法
€4 手机类和新手机类的练习
notes:
(1)父类中的private方法不能被重写
(2)父类中static方法,子类通过static方法重写;父类中非static方法,子类通过非static方法重写
(3)访问权限:子类>父类
4、构造方法访问特点:
(1)子类中所有方法默认都访问父类无参构造方法,即父类数据首先完成初始化
(2)构造方法第一条语句默认都是super();
(3)未指定父类的类中继承object类中的无参构造方法
(4)父类没有无参构造方法时:
(i)子类通过super,调用父类含参构造方法
(ii)子类通过this调用本类其他构造方法,本类其他构造方法通过super调用父类含参构造方法
€5 继承体系中,构造方法访问练习(父类有无参构造方法)
(父类没有无参构造方法)
note:
(1)this和super总结
(2)继承体系内存图解
三、抽象类
1、抽象方法:将共性的行为(方法)抽取到父类之后,该方法实现逻辑无法在父类中给出具体明确,该方法可以定义为抽象方法
2、抽象类:一个类中存在抽象方法,该类必须声明为抽象类
3、抽象方法格式:public abstract 返回值类型 方法名(参数类型 参数);
4、抽象类格式:public abstract class 类名{}
5、notes:
(1)抽象类不能实例化
(2)抽象类中不一定有抽象方法,有抽象方法一定是抽象类
(3)可以有构造方法
(4)抽象类的子类:(i)重写抽象类所有抽象方法(ii)也是抽象类
€6 抽象类练习
四、抽象类关键字final、模版设计模式、代码块
1、final关键字:可修饰方法、变量、类
修饰方法:表明该方法是最终方法,不能被重写
修饰变量:
(1)基本类型变量:数据值不变,即变量成常量
(2)引用类型变量:地址值不变,地址里面的内容可以改变
修饰类:表明该类是最终类,不能被继承
2、模版设计模式:抽象类整体看作模版,模版中不能决定的东西定义为抽象方法,让使用模版的类(继承抽象类的类)重写抽象方法实现需求
3、代码块:{}括起来的部分统称为代码块
(1)局部代码块
定义:方法中定义
作用:限定变量生命周期,及早释放,释放内存利用率
(2)构造代码块
定义:类中方法外定义
特点:每次构造方法执行都会执行此处代码块,且先于构造方法执行
作用:抽取多个构造方法中相同代码块,提高代码复用性
(3)静态代码块
定义:类中方法外
特点:static修饰,跟随类一起加载,只执行一次
作用:类加载时完成数据初始化
五、学生信息系统利用继承体系、抽象类、代码块初步优化
(1)从teacher和student两个类向上抽取父类person
(2)从StudentController类中抽取父类BaseStudentController(注意子类中抽象方法重写)
(3)通过static代码块初始化存储容器StudentDao
(4)存储容器由数组改变为集合
(5)两个存储容器向上抽取父类BaseStudentDao,采用继承体系优化
最后,从系统可以看出继承的优劣:
优:(1)提高代码复用性(2)提高代码维护性:从父类层面完成对成员的增删改查(3)类与类之间产生关系是多态的前提
劣:(1)继承是入侵性的(2)降低代码灵活性,子类必须拥有父类非私有属性和方法(3)增强代码耦合性