java面向物件多型
阿新 • • 發佈:2019-01-10
- 多型概述:某一個事物,在不同時刻表現出來的不同狀態。
多型前提:要有繼承關係;要有方法重寫。 其實沒有也是可以的,但是如果沒有這個就沒有意義。要有父類引用指向子類物件。父 f = new 子(); - 多型中的成員訪問特點
成員變數:編譯看左邊,執行看左邊。
構造方法:建立子類物件的時候,會訪問父類的構造方法,對父類的資料進行初始化。
成員方法:編譯看左邊,執行看右邊。
靜態方法:編譯看左邊,執行看左邊。 - 多型的好處:提高了程式碼的維護性(繼承保證)、提高了程式碼的擴充套件性(由多型保證)
- 抽象類:抽象類和抽象方法必須用abstract關鍵字修飾
抽象類格式: abstract class 類名 {}
抽象方法格式: public abstract void eat();
抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
抽象類中可以有構造方法,抽象類不能進行例項化,那麼要構造方法有什麼作用呢?
用於子類訪問父類資料時的初始化
抽象類不能直接例項化那麼,抽象類如何例項化呢?
按照多型的方式,由具體的子類例項化。其實這也是多型的一種,抽象類多型。
抽象類的子類
要麼是抽象類
要麼重寫抽象類中的所有抽象方法
- 抽象類的成員方法特性:
抽象方法 強制要求子類做的事情。
非抽象方法 子類繼承的事情,提高程式碼複用性 - 介面特點
介面用關鍵字interface表示 格式: interface 介面名 {}
類實現介面用implements表示 格式: class 類名 implements 介面名 {}
介面不能例項化
那麼,介面如何例項化呢?
按照多型的方式來例項化。
介面的子類
可以是抽象類。但是意義不大。
可以是具體類。要重寫介面中的所有抽象方法。(推薦方案)
介面成員特點
- 成員變數;只能是常量,並且是靜態的。
預設修飾符:public static final
建議:自己手動給出。
構造方法:介面沒有構造方法。
- 成員方法:只能是抽象方法。
預設修飾符:public abstract
建議:自己手動給出。
- 抽象類和介面的區別:
- 成員區別
抽象類:成員變數:可以變數,也可以常量
構造方法:有
成員方法:可以抽象,也可以非抽象
介面:成員變數:只可以常量
成員方法:只可以抽象 - 關係區別
類與類
繼承,單繼承
類與介面
實現,單實現,多實現
介面與介面
繼承,單繼承,多繼承 - 設計理念區別
抽象類 被繼承體現的是:”is a”的關係。 抽象類中定義的是該繼承體系的共性功能。
介面 被實現體現的是:”like a”的關係。 介面中定義的是該繼承體系的擴充套件功能。