繼承 繼承1 繼承的好處2 繼承的細節3 如果父類和子類都有同一個屬性(比如name)那麼查找時遵循以下原則4 this和super區分 1 繼承的好處 代碼的復用性提高了 代碼的擴展性和維護性提高了 2 繼承的細節 子類繼承了所有的屬性和方法,非私有的屬性和方法可以在子類直接訪問,私有的屬性pri ...
繼承1 繼承的好處2 繼承的細節3 如果父類和子類都有同一個屬性(比如name)那麼查找時遵循以下原則4 this和super區分
1 繼承的好處
-
代碼的復用性提高了
-
代碼的擴展性和維護性提高了
2 繼承的細節
補充細節如下
訪問修飾符號
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關鍵字1 基本介紹2 基本語法3 super給編程帶來的便利/細節4 找方法時,順序是:
1 基本介紹
super代表父類的引用,用於訪問父類的屬性、方法、構造器
2 基本語法
-
-
訪問父類的方法,不能訪問父類的private方法: super.方法名(參數列表)
-
訪問父類的構造器 super(參數列表);只能放在構造器的第一句,只能出現一句!
3 super給編程帶來的便利/細節
-
調用父類的構造器的好處(分工明確,父類屬性由父類初始化,子類的屬性由子類初始化)
-
當子類中有和父類中的成員(屬性和方法)重名時,為了訪問父類的成員,必須通過super。如果沒有重名,使用super,this,直接訪問是一樣的效果
-
super的訪問不限於直接父類,如果爺爺類和本類中有同名的成員,也可以使用super去訪問爺爺類的成員,如果多個基類(上級類)中都有同名的成員,使用super訪問遵循就近原則 A -> B -> C
4 找方法時,順序是:
-
先找本類,如果有,則調用
-
如果沒有,則找父類(如果有,並可以調用,則調用)
-
如果父類沒有,則繼續找父類的父類,整個規則,就是一樣的,直到Object類
提示:如果查找方法的過程中,找到了,但是不能訪問,則報錯
如果查找方法的過程中,沒有找到,則提示方法不存在