多态(掌握)
(1)同一个对象在不同时刻表现出来的不同状态。
另外的表达方式:针对同一个对象,编译期类型和运行期类型不一致。
举例:
狗(狗是狗,狗是动物)
水(水,水蒸气,冰)
(2)前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者接口引用指向子类或者实现类对象。
(3)好处和弊端:
A:好处
扩展性和维护性(是由继承和实现保证)。
B:弊端
不能使用子类的特有功能。
(4)向上转型和向下转型
A:向上转型
把子类对象赋值给父类或者接口引用
B:向下转型
把父类或者父接口引用强制转换为子类
(5)多态中的使用成员特点
A:成员变量
编译运行都看左边
B:成员方法
编译看左边,运行看右边。
全部看使用的变量类型,只是在调用该方法时,检查子类是否重写。
(6)多态的体现形式
A:具体类多态(几乎不用)
B:抽象类多态
C:接口多态
2:抽象类(掌握)
(1)多个具体的事物具备相同的方法声明,而方法体不同,我们就只抽取方法声明,然后定义到一个类中。
而一个没有方法体的方法是一个抽象方法,一个类中有抽象方法,该类必须定义为抽象类。
(2)抽象类的特点:
A:抽象类或者抽象方法用abstract修饰。
B:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
C:抽象类不能被实例化。
D:子类继承抽象类(有抽象方法的抽象类),子类要么是抽象类,要么重写所有父类抽象方法。
(3)抽象类的几个小问题
A:不能被实例化,要构造方法干啥?
B:一个类中没有抽象方法,居然定义抽象类,有什么意义?
C:抽象关键字不能和哪些关键字共存
a:private
b:final
c:static
(4)抽象类的成员:
A:成员变量 有变量,也有常量
B:构造方法 有构造方法,用于子类访问父类数据的初始化
C:成员方法 有抽象方法,也有非抽象的方法
(5)抽象类的案例
A:老师案例
B:学生案例
C:员工案例
3:接口(掌握)
(1)当一个抽象类中的方法都是抽象的时候,java就提供了一种更抽象的表达方式,叫接口。
(2)接口的成员特点:
A:成员变量 是常量 默认修饰符 public static final
B:成员方法 抽象方法 默认修饰符 public abstract
(3)接口的特点:
A:接口用interface定义
B:实现类实现接口用implements标识
C:接口不能被实例化
D:子类实现接口的时候,要么是抽象类,要么全部实现接口方法
(4)接口和类的关系
A:类与类的关系
继承关系,只能单继承,可以多层继承。
B:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
class A extends B implements C,D
C:接口与接口的关系
继承关系,可以单继承,也可以多继承。
(5)接口的思想特点(理解)
A:对外暴露的规则(USB接口)
B:程序的扩展功能(多态)
C:降低程序的耦合性(多态)
D:让类可以多实现
(6)接口和抽象类的区别
共性:都是不断抽取出来的抽象的内容。
A:成员特点
抽象类:
成员变量 可以变量,也可以常量
成员方法 可以抽象,也可以非抽象
构造方法 有
接口:
成员变量 只能是常量
成员方法 只能是抽象
构造方法 无
B:继承或者实现关系特点
a:类与类的关系
继承关系,只能单继承,可以多层继承。
b:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
c:接口与接口的关系
继承关系,可以单继承,也可以多继承。
C:设计区别
抽象类中定义的是体系的共性内容。表达的是:is a的关系。
接口中定义的是体系的扩展功能。表达的是:like a的关系。
案例:运动员和教练案例。
(7)如何实现一个继承体系
分析:由具体到抽象
实现:由抽象到具体
学习:抽象的内容,因为它定义的是共性内容。
使用:具体的内容,因为它才是具体实现,才具备更多的功能。
|
|