一、繼承的基本語法:
在Java語言中,用extends關鍵字表示一個類繼承了另一個類。例如:
public class Sub extends Base{ ....... }
Sub類到底繼承了Base類的哪些東西呢?分為以下兩種情況:
① 當Sub類和Base類位于同一個包中:Sub類繼承Base類中public、Protected和默認訪問級別的成員變量和成員方法
② 當Sub類和Base類位于不同的包中:Sub類繼承Base類中public和protected訪問級別的成員變量和成員方法
注:
java語言不支持多繼承,即一個類只能直接繼承一個類,例如以下代碼會導致編譯錯誤:
class Sub extends Base1,Base2(......)
所有的Java類都直接或間接地繼承Java.lang.Object類。Object類是所有java類的祖先。
二、方法重載(OverLoad)
對于類的方法(包括從父類中繼承的方法),如果有兩個方法的方法名相同,但參數不一致,那么可以說,一個方法是另一個方法的重載方法
注:
重載方法必須滿足以下條件:
① 方法名相同
② 方法的參數類型、個數、順序至少有一項不相同
③ 方法的返回類型可以不相同
④ 方法的修飾符可以不相同
三、方法覆蓋(Override)
覆蓋方法必須滿足多種約束:
① 子類方法的名稱、參數簽名和返回類型必須與父類方法的名稱、參數簽名和返回類型一致
② 子類方法不能縮小父類方法的訪問權限
③ 子類方法不能拋出比父類方法更多的異常
④ 方法覆蓋只存在于子類和父類之間,在同一個類中的方法只能被重載,不能被覆蓋
⑤ 父類的靜態方法不能被子類覆蓋為非靜態方法
⑥ 子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法
⑦ 父類的非靜態方法不能被子類覆蓋為靜態方法
⑧ 父類的私有方法不能被子類覆蓋
⑨ 父類的抽象方法可以被子類通過兩種途徑覆蓋:一是子類實現父類的抽象方法 二是子類重新聲明父類的抽象方法
⑩ 父類的非抽象方法可以覆蓋為抽象方法
四、方法覆蓋與方法重載的異同
相同點:
要求方法相同
都可以用于抽象方法和非抽象方法之間
不同點:
方法覆蓋要求參數簽名必須一致,而方法重載反之
方法覆蓋要求返回類型必須一致,而方法重載不做限制
方法覆蓋只能用于子類覆蓋父類的方法,方法重載用于同一個類的所有方法
方法覆蓋對方法的訪問權限和拋出的異常有特殊要求,而方法重載無限制
父類的一個方法只能被子類覆蓋一次,而一個方法在所在的類中可以被重載多次
五、super關鍵字
super和this關鍵字都可以用來覆蓋java語言的默認作用域,使被屏蔽的方法或變量為可見。
注:
在程序中,在以下情況會使用super關鍵字:
①在類的構造方法中,通過super語句調用這個類的父類的構造方法
②在子類中訪問父類的被屏蔽的方法和屬性
六、繼承的利弊和使用原則
利弊:
繼承關系最大的弱點:打破封裝
七、比較組合與繼承
1、使用繼承關系
從類A和類B中抽象出父類C,它包含了method1()和method2()、method3()方法。由于在類A和類B中都會訪問method2()方法。因此把method2()方法聲明為protected類型
2、使用組合關系
文章列表
留言列表