java基础09

面向对象之多态:
(1)同一个对象在不同时刻表现出来的不同状态。
另外的表达方式:针对同一个对象,编译期类型和运行期类型不一致。
举例:
狗(狗是狗,狗是动物)
水(水,水蒸气,冰)
(2)前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
(3)好处和弊端:
A:好处
扩展性和维护性(是由继承保证)。
B:弊端
不能使用子类的特有功能。
(4)向上转型和向下转型
A:向上转型
把子类对象赋值给父类或者父接口引用
B:向下转型
把父类或者父接口引用强制转换为子类
(5)多态中的使用成员特点
A:成员变量
编译运行都看左边
B:成员方法
编译看左边,运行看右边。

     

注意:

编程:要想做到扩展性强,那么,最好使用多态机制。

开闭原则:

对修改关闭,对拓展开放。

测试类作为客户类,只能建对象,调用方法。

多态中的问题:向下转型的时候,请千万注意,可能发生异常,编译可通过,

运行时会出现ClassCastException类转换异常


(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:成员方法 有抽象方法,也有非抽象的方法

3:接口
(1)当一个抽象类中的方法都是抽象的时候,java就提供了一种更抽象的表达方式,叫接口。
(2)接口的成员特点:
A:成员变量 是常量 默认修饰符 public static final
B:成员方法 抽象方法 默认修饰符 public abstract
(3)接口的特点:
A:接口用interface修饰
B:子类实现接口用implements标识
C:接口不能被实例化
D:子类实现接口的时候,要么是抽象类,要么全部实现接口方法
(4)接口和类的关系
A:类与类的关系
继承关系,只能单继承,可以多层继承。
B:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
C:接口与接口的关系
继承关系,可以单继承,也可以多继承。
(5)接口的思想特点(理解)
A:对外暴露的规则(USB接口)
B:程序的扩展功能(多态)
C:降低程序的耦合性(多态)
高内聚
低耦合
效率和安全

D:让类可以多实现

耦合性:类与类的关联关系。

高内聚:自己完成功能的能力。

程序的规则:低耦合,高内聚

效率安全

开闭原则:对修改关闭,对拓展开放。

单一原则:接口的定义规范的时候,尽量单一。(少)

(6)接口和抽象类的区别
共性:都是不断抽取出来的抽象的内容。


A:成员特点
抽象类:
成员变量 可以变量,也可以常量
成员方法 可以抽象,也可以非抽象
构造方法 有
接口:
成员变量 只能是常量
成员方法 只能是抽象
B:继承或者实现关系特点
a:类与类的关系
继承关系,只能单继承,可以多层继承。
b:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
c:接口与接口的关系
继承关系,可以单继承,也可以多继承。
C:设计区别
抽象类中定义的是体系的共性内容。表达的是:is a的关系。
接口中定义的是体系的扩展功能。表达的是:like a的关系。

(7)如何实现一个继承体系
分析:由具体到抽象
实现:由抽象到具体


学习:抽象的内容,因为它定义的是共性内容。
使用:具体的内容,因为它才是具体实现,才具体更多的功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章