1. 程式人生 > >面向物件——封裝、繼承、多型

面向物件——封裝、繼承、多型

封裝

  1. 概念:將類的某些資訊隱藏在類的內部,不允許外部程式直接訪問,而是直接通過該類提供的方法來實現對隱藏資訊的操作與訪問

  2. 好處
    a. 只能通規定的方法訪問資料
    b. 隱藏類的例項細節,方便自改和實現

  3. 封裝實現步驟
    a. 修改屬性的可見性:設為private
    b. 建立getter/setter方法:用於屬性的讀寫
    c. 在getter/setter方法中加入屬性控制語句:對屬性值的合法性進行判斷

  4. 訪問修飾符:可以修飾屬性和方法的訪問範圍
    a. private:本類可訪問使用
    b. 預設:本類、同包可訪問使用
    c. protected:本類、同包、子類可訪問使用
    d. public:任意位置可訪問使用

  5. this
    a. this關鍵字代表當前物件
        this.屬性:操作當前物件的屬性
        this.方法:呼叫當前物件的方法
    b. 封裝物件的屬性的時候,經常會使用this關鍵字

繼承

  1. 概念:繼承是類與類的關係
       Exampe:狗是動物,那麼我們就可以描述為:狗類是動物類的子類,動物類是狗類的父類
       注:Java中的繼承是單繼承:如同人類一樣,每個人只有一個親爹

  2. 好處
       a. 子類擁有父類的所有屬性和方法
       b. 實現程式碼的複用

  3. 語法:class 子類 extends 父類

   Example:

class
Dog extends Animal{
…… }

4 . 方法的重寫
   a. 什麼是方法的重寫
       如果子類對繼承父類的方法不滿意,是可以重寫父類繼承的方法的,當呼叫方法時會優先呼叫子類的方法

5. 繼承的初始化順序
   a.初始化父類再初始化子類
   b.先執行初始化物件中屬性,再執行構造方法中的初始化

6. final關鍵字
   a.使用final關鍵字做標識有“最終的”含義
   b.final可以修飾類、方法、屬性和變數
   c.final修飾類,則該類不允許被繼承
   d.final修飾方法,則該方法不允許被重寫
   e.final修飾屬性,則該類的屬性不會進行隱式的初始化(類的初始化屬性必須有值)或在構造方法中賦值(但只能選其一)
   f.final修飾變數,則該變數的值只能賦一次值,即變為常量

7. super關鍵字

:在物件的內部使用,可以代表父類物件
   a.訪問父類的屬性
      super.屬性
   b.訪問父類的方法
      super.方法
   c.應用:子類的構造過程當中必須呼叫其父類的構造方法,則系統是預設呼叫父類無參的構造方法;如果顯示的呼叫構造方法,必須在子類的構造方法的第一行;如果子類構造方法中既沒有顯式呼叫父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯。

多型

  1. 概念:物件的多種形態
    a. 引用多型:父類的引用可以指向本類和子類的物件
    b. 方法多型:建立本類物件時,呼叫的方法為本類方法;建立子類物件時,呼叫的方法為子類重寫的方法或者繼承的方法

  2. 引用型別轉換
    a. 向上型別轉換(隱士、自動型別轉換),是小型別到大型別的轉換
    b. 向下型別轉換(強制型別轉換),是大型別到小型別的轉換
    c. instanceof 運算子,來解決引用物件的型別,避免型別轉換的安全性問題

  3. 抽象類
    a. 語法定義:抽象類前使用 abstract 關鍵字修飾,則該類為抽象類
    b.應用場景:在某些情況下,某個父類只是知道其子類應該包括怎樣的方法,但無法準確知道這些子類如何實現這些方法;從多個具有相同特徵的類抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性
    c. 作用:限制規定子類必須實現某些方法,但不關注實現細節
    d. 使用規則:abstract定義抽象類;abstract 定義抽象方法,只有宣告,不需要實現;包含抽象方法的類是抽象類;抽象類中可以包含普通的方法,也可以沒有抽象方法;抽象類不能直接建立,可以定義引用變數

  4. 介面
    a. 概念:介面可以理解為一種特殊的類,由全域性常量和公共的抽象方法所組成;如果說類是一種具體實現體,而介面定義了某一批所需要遵守的規範,介面不關心這些類的內部資料,也不關心這些類裡方法的實現細節,它只規定這些類裡必須提供某些方法。
    b. 定義:和類定義不同,定義介面不使用 class 關鍵字,而是使用 interface 關鍵字
    c.基本語法:
    [修飾符] abstract interface 介面名 [extends 父介面1,父介面2……]
    {
    零到多個常量定義……
    零到多個抽象方法的定義……
    }
    注:介面就是用來被繼承、被實現的,修飾符一般建議用public ; 不能使用 private 和 protected 修飾介面 ; 和類不同,介面是可以多繼承的
    d. 介面定義
    常量:介面中的屬性書是常量,即使不定義時不新增 public static final 修飾符,系統也會自動新增上;
    方法:介面中的方法只能是抽象方法,總是使用,即使定義時不新增 public abstract 修飾符,系統也會自動加上。
    e. 使用介面:一個類可以實現一個或多個介面,實現介面使用 implements 關鍵字。Java中一個類只能繼承一個父類,是不夠靈活的,通過實現多個介面可以做補充;
    繼承父類實現介面的語法為:
    [修飾符] class 類名 extends 父類 implements 介面1,介面2……
    {
    類體部分//如果繼承了抽象類,需要實現繼承的抽象方法;也要實現介面中的抽象方法。
    }
    注:如果要繼承父類,繼承父類必須在實現介面之前