概述 繼承指一個類(通常稱為子類),,去繼承另一個類(通常稱為父類)的屬性和方法,,通過繼承子類可以使用父類的屬性和方法. 繼承主要解決的問題就是:共性抽取,抽取不同類之間的共性代碼,,減少代碼冗余和編程時間. 繼承是多態(tài)的前提,,沒有繼承就沒有多態(tài). 使用 繼承格式
案例 1.編寫父類Father
2.編寫子類Son,并繼承父類
3.通過子類對象調(diào)用父類屬性及方法
方法 重寫/覆蓋(Override) 規(guī)則 1.必須保證父子類方法名相同,,參數(shù)列表也相同 2.子類方法的返回值類型必須小于等于父類返回值類型的范圍 3.可以通過 @Override 注解判斷是否覆蓋重寫 4.子類方法的權(quán)限必須 大于等于 父類的權(quán)限修飾符 public > protected > defalut(啥都不寫) > private 屬性或方法重名 子類與父類的屬性或方法重名. 1.直接使用 對象名.屬性名. 實(shí)例化時等號左邊是誰,,就優(yōu)先用誰,沒有就向上找. 案例 1)為子類添加同樣的成員屬性name和成員方法method.
2)調(diào)用子類對象的name屬性和method方法
2.間接使用->通過成員方法訪問成員變量 該方法屬于誰就訪問誰的成員變量,,沒有則向上找 案例 1)給父類添加fatherMethod方法
2)通過子類對象調(diào)用該方法,,得到的name為父類中的
在子類中,父類成員變量,、子類成員變量,、局部變量重名,如何區(qū)分,? 局部變量:直接寫 子類成員變量:this.成員變量名/成員方法名 父類成員變量: super.父類成員變量名/父類方法名 案例 1.為子類添加show方法
2.調(diào)用show方法展示結(jié)果
this()指代本類中的構(gòu)造方法,,super()指父類中的構(gòu)造方法。兩者在某一類中只能出現(xiàn)一次,,且必須在構(gòu)造方法中的第一行. 繼承中父與子類的構(gòu)造方法 1.父子構(gòu)造均無參數(shù) 在調(diào)用子類實(shí)例化時,,會自動調(diào)用父類的構(gòu)造方法。(默認(rèn)先調(diào)用父類的構(gòu)造方法,,后調(diào)用自己的構(gòu)造方法) 案例 1)父類無參構(gòu)造函數(shù)
2)子類無參構(gòu)造函數(shù)
3)實(shí)例化子類對象,,查看結(jié)果
2.父類有參數(shù) 子類在繼承時會報錯 解決方案 1)需要繼承無參構(gòu)造方法,父類中進(jìn)行方法重載,,編寫一個無參構(gòu)造方法
2)需要繼承有參構(gòu)造方法,,在子類中直接調(diào)用 super(父類構(gòu)造函數(shù)參數(shù)列表); (注意事項(xiàng):必須在子類構(gòu)造方法中的調(diào)用,只能調(diào)用一次)
繼承的特性 1.子類擁有父類非 private 的屬性,、方法,。 2.子類可以擁有自己的屬性和方法,即子類可以對父類進(jìn)行擴(kuò)展,。 3.子類可以用自己的方式實(shí)現(xiàn)父類的方法,。 4.Java 的繼承是單繼承,,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,,多重繼承就是,,例如 A 類繼承 B 類,B 類繼承 C 類,,所以按照關(guān)系就是 C 類是 B 類的父類,,B 類是 A 類的父類,這是 Java 繼承區(qū)別于 C++ 繼承的一個特性,。 5.提高了類之間的耦合性(繼承的缺點(diǎn),,耦合度高就會造成代碼之間的聯(lián)系越緊密,代碼獨(dú)立性越差),。 抽象方法 概念: 假設(shè)現(xiàn)在有三角形類,、圓形類、正方形類三個類,,它們都繼承了一個父類圖形類,,圖形類中有一個計算面積的方法,顯然這個方法并不能同時適用于3個子類,,因?yàn)閳A形面積是πr2 ,正方形面積為邊長的平方,。所以該方法要在子類中進(jìn)行覆蓋重寫. 在父類中該方法不需要有方法體,只需要有個方法名,,這種方法就稱為抽象方法.Java中提供了專門的修飾符,來修飾抽象方法. 格式: 在方法類型前加上abstract修飾符,則表明該方法為抽象方法.
如何使用抽象類和抽象方法 1.不能直接new(實(shí)例化)抽象類對象. 2.必須用一個子類繼承該父類 3.必須在子類中重寫覆蓋所有抽象方法,去掉abstract,,補(bǔ)上大括號
注意事項(xiàng) 1.不能用抽象類創(chuàng)建對象,,如果創(chuàng)建,編譯無法通過而報錯。 理解:調(diào)用抽象類的抽象方法,,沒有具體的方法體,,沒有意義。 2.抽象類中,,可以有構(gòu)造方法,在子類創(chuàng)建對象時,,會自動調(diào)用,。 理解:子類實(shí)例化時原本就會調(diào)用父類構(gòu)造方法,在抽象類中一樣適用,。 3.抽象類中,,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。 理解:未包含抽象方法的抽象類,,目的就是不想讓調(diào)用者創(chuàng)建該類對象,,通常用于某些特殊的類結(jié)構(gòu)設(shè)計,比如適配器模式,。 4.抽象類的子類,必須重寫抽象父類中所有的抽象方法,,否則,,編譯無法通過而報錯。除非該子類也是抽象類,。 理解:假設(shè)不重寫所有抽象方法,,則類中可能包含抽象方法。那么創(chuàng)建對象后,調(diào)用抽象的方法,,沒有意義,。 編 輯 | 王文星 責(zé) 編 | 木有符號 where2go 團(tuán)隊(duì) |
|