1. 程式人生 > >java面向物件多型

java面向物件多型

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