面向物件的三個基本特徵是:封裝、繼承、多型。(詳解示例)
什麼是封裝:
封裝是實現面向物件程式設計的第一步,封裝就是將資料或函式等集合在一個個的單元中(我們稱它為類)。被封裝的物件通常被稱為抽象資料型別。也可以稱作抽象,將現實中的資料抽象成為資料型別
封裝的意義:
封裝的意義在於保護或者防止程式碼(資料)被我們無意中破壞。在面向物件程式設計中資料被看作是一箇中心的元素並且和使用它的函式結合的很密切,從而保護它不被其它的函式意外的修改。使原來暴露在明面上的資料的安全性得以大大提高。
①保護資料成員,不讓類以外的程式直接訪問或修改屬性的值,只能通過提供的公共的介面訪問,也稱之為資料的封裝。
②方法的細節對使用者是隱藏的,只要介面不變,內容的修改不會影響到外部的呼叫該方法的使用者,也稱之為方法的封裝。
③當物件含有完整的屬性和與之對應的方法時稱其為資料的封裝。
④從物件外面不能直接訪問物件的屬性,只能通過和該屬性對應的get方法訪問。
⑤物件的方法可以獲取物件以外面的資料。
JAVA類成員的訪問修飾符:
也就是類的方法和成員變數的訪問控制符,因為一個類作為整體物件不可見,但是並不代表他的所有域和方法也對程式其他部分不可見,所以需要有他們的訪問修飾符來判斷。
許可權訪問的範圍如下:
訪問修飾符 |
同一個類 |
同包 |
不同包,子類 |
不同包,非子類 |
private |
√ |
|||
protected |
√ |
√ |
√ |
|
public |
√ |
√ |
√ |
√ |
預設 |
√ |
√ |
繼承:
繼承主要實現重用程式碼,節省開發時間。
1、JAVA中的繼承規則:
-
- 繼承是可傳遞的。如果C從B中派生,B又從A中派生,那麼C不僅繼承了B中宣告的成員,同樣也繼承了A中的成員。Object類作為所有類的基類。
- 派生類應當是對基類的擴充套件。派生類可以新增新的成員,但不能除去已經繼承的成員的定義。
- 建構函式和解構函式不能被繼承。除此之外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。
- 派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這派生類刪除了這些成員,只是不能再訪問這些成員。
- 類可以定義虛文法、虛屬性以及虛索引指示器,它的派生類能夠過載這些成員,從而實現類可以展示出多型性。
new關鍵字
如果父類中聲明瞭一個沒有friend修飾的protected或public方法,子類中也聲明瞭同名的方法。則用new可以隱藏父類中的方法。
base關鍵字
base 關鍵字用於從派生類中訪問基類的成員:
- 呼叫基類上已被其他方法重寫的方法。
- 指定建立派生類例項時應呼叫的基類建構函式。
多型:
1、“一個介面,多種方法”
同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。
多型的三個條件:
a. 繼承的存在(繼承是多型的基礎,沒有繼承就沒有多型).
b. 子類重寫父類的方法(多型下呼叫子類重寫的方法).
c. 父類引用變數指向子類物件(子類到父類的型別轉換).
過載(overload)和重寫(override)是實現多型的兩種主要方式。
實現多型:
- 介面多型性。
- 繼承多型性。
- 通過抽象類實現的多型性。