Java學習筆記十一:面向物件之封裝、繼承、多型
面向物件三大特性:封裝、繼承、多型
1. 封裝
程式編寫追求“高內聚,低耦合”,高內聚即類內部資料操作細節自己完成,不允許外部干涉;低耦合即僅暴露少量的方法供外部使用。
Java中的封裝:“屬性私有,get/set供外部訪問”
封裝的作用:
1)提高程式安全性,保護資料
2)隱藏程式碼實現細節
3)統一介面(禁止直接訪問一個物件中資料的實際表示,應通過操作介面來訪問,稱為資訊隱藏)
4)系統可維護性增高
2. 繼承
繼承是類和類之間的一種關係,其本質是對一批類的抽象,從而實現對現實世界更好的建模。
其中需要注意以下三點:
Object類:
Java中所有的類都直接或間接繼承了Object類
Super:
注意點:
- super呼叫父類的構造方法,必須在構造方法的第一行
- super必須只能出現在子類的方法或構造方法中
- super和this不能同時呼叫構造方法
vs this:
- 代表的物件不同:this代表本身呼叫者這個物件;super代表父類物件的應用;
- 前提:this沒有繼承也可以使用;super只能在繼承條件才可以使用
- 構造方法:this()本類的構造;super()父類的構造
重寫:
(需要有繼承關係,子類重寫父類的方法)
重寫時:
1)方法名必須相同
2)引數列表必須相同
3)修飾符:範圍可以擴大但不能縮小 public>protected>default>private
4)丟擲異常:範圍可以縮小,不可以擴大
為什麼需要重寫?
父類的功能,子類不一定需要,或者不一定滿足。
注意:
重寫只和非靜態方法有關;靜態方法在類載入時就載入了。
static(方法屬於類,不屬於例項)、final(常量)、private修飾的方法無法重寫。
3. 多型
多型即同一個方法可以根據傳送物件的不同而採用多種不同的行為方式。
一個物件的實際型別是確定的,可以指向的引用型別不確定。
也即:
一個引用變數到底會指向那個型別的例項物件,該引用變數發出的方法呼叫的到底是哪個類中實現的方法,必須在程式執行期間才能確定。
如:
物件執行哪些方法與左邊有關:
使用多型注意:
- 多型是方法的多型,和屬性無關;
- 父類和子類需要有聯絡,否則型別轉換異常;
- 多型存在的條件:繼承關係,方法需要重寫,父類引用指向子類物件:
Father f1 = new Son();
補充: 多型有編譯時多型(過載)與執行時多型(重寫)兩種實現機制。
另外,多型中涉及instanceof與型別轉換,如下:
instanceof:
判斷一個物件是什麼型別
X instanceof Y
如果X、Y有父子關係,則為true
型別轉換:
1)父類引用指向子類物件
2)子類-->父類:向上轉型,可能會丟失一些子類的方法
3)父類-->子類:向下轉型,強制轉換
4)型別轉換作用:方便方法呼叫,減少重複程式碼
課程:【狂神說Java】Java零基礎學習視訊通俗易懂_嗶哩嗶哩_bilibili
步履不停