- 套件:解決類別名稱衝突的問題
- 封裝
- 主要好處:讓你可以改變程式碼的實作,而又不會破壞別人的程式碼(使用你的程式碼)
- 設計概念:
- 保護實體變數
- 建立public存取函式,類別使用者不能直接存取實體變數
- 對於函式的名稱,使用JavaBeans的命名慣例
- 繼承
- 好處:
- 加強程式碼的再用性
- 使用多型
- IS-A關係(extends,implements)是繼承關係,HAS-A是使用關係\
- 一個類別只能繼承一個父類別
- 多型
- 通過不只一個IS-A關係的就被認為是多型的
- 除了Object以外,所有Java物件都是多型的
- 你可以使用一個較通用的參考變數型別(一個父類別或介面)來指涉到一個物件。但在執行時期,會根據真實物件來做動態選擇的只有實體函式
- 只有被覆寫的實體函式可以根據真實物件被動態的呼叫
- 覆寫(Override)
- 子類別必須實作父類別的抽象函式,除非子類別也是抽象的
- 參數必須與原函式相同
- 回傳型別必須相同,或是它的子型別
- 存取等級可以更寬鬆(不可小於父類別方法)
- 只有在實體函式被子類別繼承時才能被覆寫
- 不可拋出新的可控式異常,可以拋出範圍更拘限的異常
- 不能覆寫static或final函式
- 執行時期決定哪一個覆寫函式被呼叫
- 多載(Overload)
- 必須變更參數
- 可以變更回傳型別
- 可以變更存取修飾子
- 可以宣告新的或更廣的可控式異常
- 可以在同一個類別或子類別多載函式
- 編譯時期傳入的引數參考型別決定哪一個多載函式被呼叫
- 轉型
- 轉型有兩種:向下或向上
- 向下:父類別參考變數指涉到子類別的物件,要指派給子類別參考時使用明確的向下轉型
- 向上轉型:可以明確的或暗中地,將一個參考變數指派給父類別的參考變數。指派動作限制了新變數的存取能力
- 實作
- 實作介面就是正確地覆寫定義在介面的函式
- 一個類別可以實作多個介面
- 介面可以繼承介面,不能繼承類別
- 介面不能實作介面或類別
- 回傳型別
- 物件參考可以接受null當作回傳值
- 陣列可以被宣告成回傳型別或回傳值
- 基本型別當成回傳型別,可以回傳任何能被暗中轉換成回傳型別的值
- 物件當成回傳型別,可以回傳子型別的物件
- 使用介面當成回傳型別的函式,可以回傳任何實作者
- 建構子和實體化
- 每一個類別以及抽象類別都至少一個建構子
- 建構子沒有回傳型別
- 執行方式:
- 建構子呼叫父類別的建構子,父類別建構子在呼叫它的父類別建構子,一直下去直到Object的建構子
- Object建構子執行並回傳子建構子,一直下去直到原先被呼叫的建構子,完畢,建立新的實體
- 建構子可以用任何存取修飾子
- 如果你的類別沒有建構子,系統預設一個沒有參數的預設建構子
- 建構子第一行必須呼叫this()或是super()
- 如果第一行沒有this()或super(),編譯器自動加上一行super()
- 建構子執行完畢後,才能使用實體變數
- 建構子不能被繼承,不能被覆寫
- 建構子可以被其它建構子呼叫(使用super()或this())
- 不能同時呼叫this()和super()
- 靜態(Static)
- 用於和物件無關的行為或屬性
- static函式不能被覆寫,但可以被重新定義
- 耦合
- 一個類別知道,或使用,其他類別成員的程度
- 鬆散耦合:將類別封裝的很好,彼此之間的參考減少到最低,並盡量使用API來互相溝通
- 內聚力
- 一個類別擁有單一的,定義精確的角色或責任
- 高內聚力:一個類別成員支援單一的、定義精確的角色或責任。
2012年3月4日 星期日
JAVA物件導向複習
訂閱:
文章 (Atom)