1 多態
1.1 多態概述
同一個對象,在不同時刻表現出來的不同形態
舉例: 貓
- 我們可以說貓是貓: 貓 cat = new 貓();
- 我們也可以說貓是動物: 動物 animal = new 貓();
- 這里貓在不同的時刻表現出來了不同的形態,這就是多態
- 多態的前提和體現
- 有繼承/實現關系
- 有方法重寫
- 有父類引用指向子類對象
1.2 多態中成員訪問特點
成員變量: 編譯看左邊,執行看左邊
成員方法: 編譯看左邊,執行看右邊
- 為什么成員變量和成員方法的訪問不一樣呢?
- 因為成員方法有重寫,而成員變量沒有
1.3 多態的好處和弊端
多態的好處: 提高了程序的擴展性
多態的弊端: 不能使用子類的特有功能
- 具體體現: 定義方法的時候,使用父類型作為參數,將來在使用的時候,使用具體的子類型參與操作
1.4 多態中的轉型
- 向上轉型
- 從子到父
- 父類引用指向子類對象
- 向下轉型
- 從父到子
- 父類引用轉為子類對象
2 抽象類
2.1 抽象類概述
在Java中,一個==沒有方法體==的方法應該定義為==抽象方法==,而類中如果有==抽象方法==,該類必須定義為==抽象類==
2.2 抽象類的特點
抽象類和抽象方法必須使用abstract關鍵字修飾
public abstract class 類名 {}public abstract void eat();
- 抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類
- 抽象類不能實例化
- 抽象類如何實例化呢?
- 參照多態的方式,通過子類對象實例化,這叫抽象類多態
- 抽象類的子類
- 要么重寫抽象類中的所有抽象方法
- 要么是抽象類
2.3 抽象類的成員特點
- 成員變量
- 可以是變量
- 也可以是常量
- 構造方法
- 有構造方法,但是不能實例化
- 那么,構造方法的作用是什么呢? 用于子類訪問父類數據的初始化
- 成員方法
- 可以有抽象方法: 限定子類必須完成某些動作
- 也可以有非抽象方法: 提高代碼復用性
3 接口
3.1 接口概述
接口就是一種==公共的規范標準==,只要符合規范標準,大家都可以通用
Java中的接口更多的體現在==對行為的抽象==
3.2 接口的特點
接口用關鍵字interface修飾
- public interface 接口名 {}
類實現接口用implements表示
- public class 類名 implements 接口名 {}
接口不能實例化
接口如何實例化呢? 參照多態的方式,通過實現類對象實例化,這叫接口多態
多態的形式: 具體類多態,抽象類多態,接口多態
- 多態的前提: 有繼承或者實現關系、有方法重寫、有父(類/接口)引用指向(子/實現)類對象
接口的實現類
要么重寫接口中的所有抽象方法
- 要么是抽象類
3.3 接口的成員特點
- 成員變量
- 只能是常量
- 默認修飾符: public static final
- 構造方法
- 接口沒有構造方法,因為接口主要是對行為進行抽象的,是沒有具體存在
- 一個類如果沒有父類,默認繼承自Object類
- 成員方法
- 只能是抽象方法
- 默認修飾符: public abstract
- 關于接口中的方法,JDK8和JDK9中有一些新特性,后面再講解
3.4 類和接口的關系
- 類和類的關系
- 繼承關系,只能單繼承,但是可以多層繼承
- 類和接口的關系
- 實現關系,可以單實現,也可以多實現,還可以在繼承一個類的同時實現多個接口
- 接口和接口的關系
- 繼承關系,可以單繼承,也可以多繼承
3.5 抽象類和接口的區別
成員區別
抽象類
變量, 常量; 有構造方法; 有抽象方法, 也有非抽象方法
- 接口
常量; 抽象方法
關系區別
- 類與類
繼承,單繼承 - 類與接口
實現,可以單實現,也可以多實現 - 接口與接口
繼承,單繼承,多繼承
- 類與類
設計理念區別
抽象類
對類抽象,包括屬性、行為
- 接口
對行為抽象,主要是行為