在看集合源碼的時候,因為對一些知識點有些混淆,導致看源碼比較吃力。所以重新回顧一下麵向對象的繼承和多態,順便記錄一下重點。 繼承 子類會繼承父類的所有屬性和方法,但私有屬性和方法在子類不能直接訪問,需要通過父類提供的公共方法訪問; 子類必須調用父類的構造器,完成父類的初始化(創建子類對象時會調用父類 ...
在看集合源碼的時候,因為對一些知識點有些混淆,導致看源碼比較吃力。所以重新回顧一下麵向對象的繼承和多態,順便記錄一下重點。
繼承
-
子類會繼承父類的所有屬性和方法,但私有屬性和方法在子類不能直接訪問,需要通過父類提供的公共方法訪問;
-
子類必須調用父類的構造器,完成父類的初始化(創建子類對象時會調用父類的無參構造器,其實在子類的無參構造方法的第一行預設有
super()
); -
創建子類對象時,不管子類使用有參構造還是無參構造,預設情況下總會去調用父類的無參構造。如果父類沒有寫無參構造器(當父類寫了有參構造器而沒寫無參構造器,那麼無參構造器就沒有了),那麼子類的構造器要用
super()
指定使用父類的什麼構造器,否則編譯不通過; -
如果想要指定調用父類的某個構造器,則需要用
super()
顯式調用。調用super()
時必須要放在第一行,而this()
也是必須放在第一行,所以這兩個方法只能用一個,不能共存; -
Object類是所有類的父類,因此創建子類對象調用父類構造器時,會一直向上追溯到Object類;
-
當子類對象訪問某個屬性/方法時:
(1) 首先看子類對象本身有沒有該屬性/方法,如果有並且是可以訪問的,那麼直接訪問
(2) 如果子類沒有該屬性/方法,看父類有沒有該屬性/方法,如果父類有並且是可以訪問的,那麼就訪問
(3) 同理,如果父類也沒有,則一直向上找,直到Object類
後續還會繼續更新總結多態的知識重點
有不懂的地方可以在下麵評論,隨時交流~