繼承
繼承1 繼承的好處2 繼承的細節3 如果父類和子類都有同一個屬性(比如name)那么查找時遵循以下原則4 this和super區分
1 繼承的好處
-
代碼的復用性提高了
-
代碼的擴展性和維護性提高了
2 繼承的細節
-
子類繼承了所有的屬性和方法,非私有的屬性和方法可以在子類直接訪問,私有的屬性private不能在子類直接訪問,要通過父類提供公共的方法去訪問
補充細節如下
訪問修飾符號
?
public 同類 同包 子類 不同包
?
protected 同類 同包 子類
?
默認 同類 同包
?
private 同類
?
修飾符使用的注意事項
?
1. 修飾符可以用來修飾類中的屬性,成員方法以及類
2. 只有默認的和public才能修飾類,并且遵循上述訪問權限的特點
3. 成員方法的訪問規則和屬性完全一樣
-
子類必須呼叫父類的構造器,完成父類的初始化
-
當創建子類物件時,不管使用子類哪個構造器,默認情況下總會去呼叫父類的無參構造器,如果父類沒有提供無參構造器,則必須在子類的構造器中用super去指定父類的哪個構造器完成對父類的初始化作業,否則,編譯不會通過
-
如果希望指定去呼叫父類的某個構造器,則顯式的呼叫一下 : super(引數串列)
-
super在使用時,需要放在構造器的第一行
-
super()和this()都只能放在構造器的第一行,以此這兩個方法不能共存在一個構造器
-
java所有類都是Object類
-
父類構造器的呼叫不限于直接父類!將一直往上追溯到Object類(頂級父類)
-
子類最多只能繼承一個父類(指直接繼承),即java中是單繼承機制
-
不能濫用繼承,子類和父類之間必須滿足 is—a 的邏輯關系
3 如果父類和子類都有同一個屬性(比如name)那么查找時遵循以下原則
-
首先看子類是否有該屬性
-
如果子類有這個屬性,并且可以訪問,則回傳資訊
-
如果子類沒有這個屬性,就看父類有沒有這個屬性(如果父類有這個屬性,并且可以訪問,就回傳資訊...)(相當于創建一個新的String類把父類的String類給覆寫了)(但是父類的String類也可以訪問,比如用方法來訪問)
-
如果父類沒有,就按照(3)的規則繼續找上級父類,直到Object...
4 this和super區分
| NO. | 區別點 | this | super |
|---|---|---|---|
| 1 | 訪問屬性 | 訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續查找 | 從父類開始查找屬性 |
| 2 | 呼叫方法 | 訪問本類中的方法,如果本類沒有此方法則從父類中繼續查找 | 從父類開始查找方法 |
| 3 | 呼叫構造器 | 呼叫本類構造器,必須放在構造器的首行 | 呼叫父類構造器,必須放在子類構造器的首行 |
| 4 | 特殊 | 表示當前物件 | 子類中訪問父類物件 |
super關鍵字
super關鍵字1 基本介紹2 基本語法3 super給編程帶來的便利/細節4 找方法時,順序是:
1 基本介紹
super代表父類的參考,用于訪問父類的屬性、方法、構造器
2 基本語法
-
訪問父類的屬性,但不能訪問父類的private屬性 :super.屬性名
-
訪問父類的方法,不能訪問父類的private方法: super.方法名(引數串列)
-
訪問父類的構造器 super(引數串列);只能放在構造器的第一句,只能出現一句!
3 super給編程帶來的便利/細節
-
呼叫父類的構造器的好處(分工明確,父類屬性由父類初始化,子類的屬性由子類初始化)
-
當子類中有和父類中的成員(屬性和方法)重名時,為了訪問父類的成員,必須通過super,如果沒有重名,使用super,this,直接訪問是一樣的效果
-
super的訪問不限于直接父類,如果爺爺類和本類中有同名的成員,也可以使用super去訪問爺爺類的成員,如果多個基類(上級類)中都有同名的成員,使用super訪問遵循就近原則 A -> B -> C
4 找方法時,順序是:
-
先找本類,如果有,則呼叫
-
如果沒有,則找父類(如果有,并可以呼叫,則呼叫)
-
如果父類沒有,則繼續找父類的父類,整個規則,就是一樣的,直到Object類
提示:如果查找方法的程序中,找到了,但是不能訪問,則報錯
如果查找方法的程序中,沒有找到,則提示方法不存在
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/455507.html
標籤:其他
上一篇:事件監聽器
