簡(jiǎn)單的總結(jié)了一下java方法繼承,方法重載,方法覆蓋的內(nèi)容,如下:
1、方法覆蓋:如果在子類中定義一個(gè)方法,其名稱、返回類型及參數(shù)簽名正好與父類中某個(gè)方法的名稱、返回類型及參數(shù)簽名相匹配,那么可以說(shuō),子類的方法覆蓋了父類的方法。
子類的方法名稱返回類型及參數(shù)簽名 必須與父類的一致
子類方法不能縮小父類方法的訪問(wèn)權(quán)限
子類方法不能拋出比父類方法更多的異常
方法覆蓋只存在于子類和父類之間,同一個(gè)類中只能重載
父類的靜態(tài)方法不能被子類覆蓋為非靜態(tài)方法
子類可以定義于父類的靜態(tài)方法同名的靜態(tài)方法,以便在子類中隱藏父類的靜態(tài)方法(滿足覆蓋約束),
而且Java虛擬機(jī)把靜態(tài)方法和所屬的類綁定,而把實(shí)例方法和所屬的實(shí)例綁定。
父類的非靜態(tài)方法不能被子類覆蓋為靜態(tài)方法
父類的私有方法不能被子類覆蓋
父類的抽象方法可以被子類通過(guò)兩種途徑覆蓋(即實(shí)現(xiàn)和覆蓋)(P169)
父類的非抽象方法可以被覆蓋為抽象方法
2、方法繼承:利用extends關(guān)鍵字一個(gè)方法繼承另一個(gè)方法,而且只能直接繼承一個(gè)類。
當(dāng)Sub類和Base類在同一個(gè)包時(shí)Sub類繼承Base類中的public/protected/默認(rèn)級(jí)別的變量個(gè)方法
在不同包時(shí)繼承public/protected級(jí)別的變量和方法。
3、方法重載:如果有兩個(gè)方法的方法名相同,但參數(shù)不一致,哪么可以說(shuō)一個(gè)方法是另一個(gè)方法的重載。
方法名相同
方法的參數(shù)類型,個(gè)數(shù)順序至少有一項(xiàng)不同
方法的返回類型可以不相同
方法的修飾符可以不相同
main方法也可以被重載
4、Super關(guān)鍵字:super和this關(guān)鍵字都可以用來(lái)覆蓋Java語(yǔ)言的默認(rèn)作用域,使被屏蔽的方法或變量變?yōu)榭梢?三種情況下的不可見P171)。
父類的成員變量和方法為private使用super訪問(wèn)編譯出錯(cuò)
在類的構(gòu)造方法種,通過(guò)super語(yǔ)句調(diào)用這個(gè)類的父類的構(gòu)造方法
在子類種訪問(wèn)父類的被屏蔽的方法和屬性
只能在構(gòu)造方法或?qū)嵗椒▋?nèi)使用super關(guān)鍵字,而在靜態(tài)方法和靜態(tài)代碼塊內(nèi)不能使用super
5、繼承的利弊和使用原則:
集成數(shù)的層次不可太多
集成數(shù)的上層為抽象層
(1)定義了下層子類都用友的相同屬性和方法,并且盡可能默認(rèn)實(shí)現(xiàn),從而提高重用性
(2)代表系統(tǒng)的接口,描述系統(tǒng)所能提供的服務(wù)
繼承關(guān)系最大的弱點(diǎn):打破封裝
精心設(shè)計(jì)專門用于被繼承的類
(1)對(duì)這些類必須提供良好的文檔說(shuō)明
(2)盡可能的封裝父類的實(shí)現(xiàn)細(xì)節(jié),把代表時(shí)間細(xì)節(jié)的屬性和方法定義為private類型
(3)如果某些實(shí)現(xiàn)細(xì)節(jié)必須被子類訪問(wèn),定義為protected類型 (4)把不允許子類覆蓋的方法定義為final類型
(5)父類的構(gòu)造方法不允許調(diào)用可被子類覆蓋的方法
(6)如果某些類不是專門為了繼承而設(shè)計(jì),那么隨意繼承它是不安全的
6、多態(tài):
對(duì)于一個(gè)引用類型的變量,Java編譯器按照它的聲明的類型來(lái)處理
對(duì)于一個(gè)引用類型的變量,運(yùn)行時(shí)Java虛擬機(jī)按照它的實(shí)際引用的對(duì)象來(lái)處理
運(yùn)行時(shí)環(huán)境中,通過(guò)引用類型變量來(lái)訪問(wèn)所引用對(duì)象的方法和屬性時(shí),Java虛擬機(jī)采用以下綁定規(guī)則
1)實(shí)例方法與引用變量實(shí)際引用的對(duì)象的方法綁定,屬于動(dòng)態(tài)綁定
2)靜態(tài)方法與引用變量所聲明的類型的方法綁定,屬于靜態(tài)綁定
3)成員變量(包括靜態(tài)和實(shí)例變量)與引用變量所聲明的類型的成員變量綁定,屬于靜態(tài)綁定