1. 程式人生 > 其它 >面向物件(封裝;繼承;多型)

面向物件(封裝;繼承;多型)

面向物件(OOP)

本質:以類的方式組織程式碼,以物件的組織(封裝)資料

抽象的程式設計思想

封裝


  • 該露的露,該藏的藏

    • 程式設計要追求“高內聚,低耦合”。

      • 高內聚:類的內部資料操作細節自己完成,不允許外部干涉

      • 低耦合:僅暴露少量的方法給外部使用

  • 封裝

    • 通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏

總結起來就一句:屬性私有,get/set

繼承


  • 繼承的本質是對一批類的抽象,從而實現對現實世界更好的建模

  • extends的意思是“擴充套件”。子類是父類的擴充套件

  • Java中類只有單繼承,沒有多繼承 (介面可以多實現:implements)

  • 繼承是類和類之間的一種關係。除此之外,類和類之間的關係還有依賴、組合、聚合等

  • 繼承關係的兩個類,一個為子類(派生類),一個為父類(基類),子類繼承父類,需使用extends關鍵字

  • 子類和父類之間,從意義上來講應該具有“is a”的關係

  • Object類:在Java中,所有的類都預設直接或間接繼承Object


  • super

    • super呼叫父類的構造方法,必須在構造方法第一個

    • super必須只能出現在子類的方法或者構造方法中

    • super和this不能同時呼叫構造方法

  • Vs this:

    • 代表的物件不同:

      • this:本身呼叫者這個物件

      • super:代表父類的引用

    • 前提:

      • this:沒有繼承也可以使用

      • super:只能在繼承條件下才能使用

    • 構造方法:

      • this():本類的構造

      • super():父類的構造


  • 重寫:需要有繼承關係,子類重寫父類的方法!

    • 方法名必須相同

    • 引數列表必須相同

    • 修飾符:範圍可以擴大,但不能縮小

      • public>protected>default>private

    • 丟擲的異常:範圍可以縮小,但不能擴大

      • ClassNotFountException-->Exception(大)

  • 重寫:子類的方法和父類必須要一致,方法體不同!

  • 為什麼需要重寫:

    • 父類的功能,子類不一定需要,或不一定滿足

    • @override

    • IDEA快捷鍵:ctrl+O

多型


  • 即同一方法可以根據傳送物件的不同而採用多種不同的行為方式

  • 一個物件的實際型別是確定的,但可以指向物件的引用的型別有很多

  • 多型存在的條件

    • 有繼承關係

    • 子類重寫父類方法

    • 父類引用指向子類物件


  • 多型是方法的多型,屬性沒有多型

  • 父類和子類,有聯絡 (若沒有,則出現型別轉換異常! ClassCastException)

  • 存在條件:繼承關係,方法需要重寫,父類引用指向子類物件

    • Father f = new Son();

  • 不可重寫方法:

    1. static方法:屬於類,不屬於例項

    2. final常量

    3. private方法

抽象類(abstract)

  • abstract修飾符可以修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法;如果修飾類,那麼該類就是抽象類

  • 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告為抽象類

  • 抽象類不能使用new關鍵字來建立物件,它是用來讓子類繼承的(約束)

  • 抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的

  • 子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類

public abstract

介面(interface)

  • 普通類:只有具體實現——(有構造方法)

  • 抽象類:具體實現和規範(抽象方法)都有——(有構造方法)

  • 介面:只有規範,自己無法寫方法——(沒有構造方法)

介面就是規範,定義的一組規則,體現了現實世界中“如果你是...你必須能...”的思想

介面的本質是契約

public static final