構(gòu)造方法
super
(1)子類可以通過super(...)調(diào)用父類的構(gòu)造方法
(2)果子類沒有通過super(...)調(diào)用,則會自動調(diào)動父類的默認(rèn)構(gòu)造方法
(3)沒有默認(rèn)構(gòu)造方法逞力。它的任何子類都必須在構(gòu)造方法中通過super(...)調(diào)用Base的帶參數(shù)構(gòu)造方法-
構(gòu)造方法調(diào)用重寫方法
image.png
image.pngimage.png
輸出結(jié)果是:0 123
第一次輸出為0,第二次為123宽气。第一行為什么是0呢?第一次輸出是在new過程中輸出的,在new過程中,首先是初始化父類输硝,父類構(gòu)造方法調(diào)用test(),test被子類重寫了程梦,就會調(diào)用子類的test()方法点把,子類方法訪問子類實(shí)例變量a,而這個(gè)時(shí)候子類的實(shí)例變量的賦值語句和構(gòu)造方法還沒有執(zhí)行屿附,所以輸出的是其默認(rèn)值0郎逃。
在父類構(gòu)造方法中調(diào)用可被子類重寫的方法,是一種不好的實(shí)踐挺份,容易引起混淆窃判,應(yīng)該只調(diào)用private的方法绒疗。
重名與靜態(tài)綁定
(1)子類可以重寫父類非private的方法,當(dāng)調(diào)用的時(shí)候批销,會動態(tài)綁定嘿辟,執(zhí)行子類的方法
(2)重名是可以的土榴,重名后實(shí)際上有兩個(gè)變量或方法厦画。對于private變量和方法嘱能,它們只能在類內(nèi)被訪問,訪問的也永遠(yuǎn)是當(dāng)前類的伦吠,即在子類中,訪問的是子類的魂拦,在父類中毛仪,訪問的父類的,它們只是碰巧名字一樣而已芯勘,沒有任何關(guān)系箱靴。
(3)對于public變量和方法,則要看如何訪問它荷愕,在類內(nèi)訪問的是當(dāng)前類的衡怀,但子類可以通過super.明確指定訪問父類的。在類外安疗,則要看訪問變量的靜態(tài)類型抛杨,靜態(tài)類型是父類,則訪問父類的變量和方法荐类,靜態(tài)類型是子類怖现,則訪問的是子類的變量和方法
例:
輸出
當(dāng)通過b (靜態(tài)類型Base) 訪問時(shí), 訪問的是Base的變量和方法,當(dāng)通過c (靜態(tài)類型Child)訪問時(shí)屈嗤, 訪問的是Child的變量和方法潘拨, 這稱之為靜態(tài)綁定, 即訪問綁定到變量的靜態(tài)類型饶号, 靜態(tài)綁定在程序編譯階段即可決定铁追, 而動態(tài)綁定則要等到程序運(yùn)行時(shí)。 實(shí)例變量茫船、靜態(tài)變量琅束、靜態(tài)方法、private方法透硝,都是靜態(tài)綁定的狰闪。
重載和重寫
- 重載
重載是指方法名稱相同但參數(shù)簽名不同(參數(shù)個(gè)數(shù)或類型或順序不同) - 重寫
重寫是指子類重寫父類相同參數(shù)簽名的方法
當(dāng)有多個(gè)重名函數(shù)的時(shí)候,在決定要調(diào)用哪個(gè)函數(shù)的過程中濒生,首先是按照參數(shù)類型進(jìn)行匹配的埋泵,換句話說,尋找在所有重載版本中最匹配的罪治,然后才看變量的動態(tài)類型丽声,進(jìn)行動態(tài)綁定
父子類型轉(zhuǎn)換
(1)向上轉(zhuǎn)型
子類型的對象可以賦值給父類型的引用變量
(2)向下轉(zhuǎn)型?
語法上可以進(jìn)行強(qiáng)制類型轉(zhuǎn)換觉义,但不一定能轉(zhuǎn)換成功
個(gè)父類的變量雁社,能不能轉(zhuǎn)換為一個(gè)子類的變量,取決于這個(gè)父類變量的動態(tài)類型(即引用的對象類型)是不是這個(gè)子類或這個(gè)子類的子類晒骇。
例:
可以
不可以
-
instanceof
image.png
從而安全的進(jìn)行類型轉(zhuǎn)換
instanceof前面是變量霉撵,后面是類,返回值是boolean值洪囤,表示變量引用的對象是不是該類或其子類的對象
繼承訪問權(quán)限 (protected)
(1)不能被外部任意訪問徒坡,但可被子類訪問
(2)還表示可被同一個(gè)包中的其他類訪問,不管其他類是不是該類的子類
(3)模板方法在很多框架中有廣泛的應(yīng)用瘤缩,這是使用protected的一個(gè)常用場景
可見性重寫
重寫時(shí)喇完,子類方法不能降低父類方法的可見性
不能降低是指,父類如果是public剥啤,則子類也必須是public锦溪,父類如果是protected,子類可以是protected府怯,也可以是public刻诊,即子類可以升級父類方法的可見性但不能降低
"is-a"的關(guān)系
即子類對象也屬于父類,子類必須支持父類所有對外的行為
防止繼承 (final)
默認(rèn)情況下都是可以被繼承的富腊,但加了final關(guān)鍵字之后就不能被繼承了
寫在最后
都看到這里坏逢,保存思維導(dǎo)圖,順便給個(gè)贊唄!