其實在咱們面向對象這一階段的學習中,咱們就是圍繞Java的三大特性(封裝、繼承、多態)來說解的,在上一掌內容中咱們講解了一部分封裝的有關知識,今天咱們來重點學習繼承的學習。java
繼承就是在一個已有類的基礎上派生出新類ide
子類繼承父類的特徵和行爲,使得子類對象(實例)具備父類的實例域和方法,或子類從父類繼承方法,使得子類具備父類相同的行爲學習
(父類更通用,子類更具體)this
A:提升了代碼的複用性spa
B:提升了代碼的維護性(經過少許的修改,知足不斷變化的具體要求)code
C:讓類與類產生了一個關係,是多態的前提對象
有共同的屬性或操做blog
有細微的差異繼承
A:讓類的耦合性加強。這樣某個類的改變就會影響其餘和該類相關的類rem
·原則:低耦合,高內聚。
·耦合:類與類的關係
·內聚:本身完成某件事情的能力
B:打破了封裝性
特色:
A:Java只支持單繼承,不支持多繼承(C++支持)
B:Java支持多層繼承(繼承體系)
兒子繼承爸爸 爸爸繼承爺爺 兒子能夠經過爸爸繼承爺爺
注意:
A: 子類只能繼承父類全部非私有成員(成員方法和成員變量)
B:子類不能繼承父類的構造方法,可是能夠經過super關鍵字去訪問方法
C: 不要爲了部分功能而繼承(多層繼承會使得子類繼承多餘的方法)
A:成員變量
a:子類的成員變量名稱和父類中的成員變量名稱不同,這個太簡單
b:子類的成員變量名稱和父類中的成員變量名稱同樣,這個怎麼訪問
子類的方法訪問變量的查找順序:
·在子類方法的局部範圍找,有就使用。
·在子類的成員範圍找,有就使用。
·在父類的成員範圍找,有就使用。
·找不到,就報錯。
不只要輸出局部範圍的num,還要輸出本類成員範圍的num
使用super關鍵字
this 表明本類對應的引用
Super 表明父親存儲空間的標識(能夠理解爲父親引用)能夠操做父親 的成員
A:調用成員變量
·this.成員變量 調用本類的成員變量
·super.成員變量 調用父類的成員變量
B:調用構造方法
·this(...) 調用本類的成員變量
·Super(...)調用父類的成員變量
C:調用成員方法
·this.成員方法 調用本類的成員方法
·super.成員方法 調用父類的成員方法
A:子類中全部的構造方法默認都會訪問父類中空參數的構造方法
B:理由:
由於子類會繼承父類中的數據,可能還會使用父類的數據
因此,子類初始化以前,必定要先完成父類數據的初始化
注意:子類每個構造方法的第一條語句默認都是:super()
若是父類沒有無參構造方法,那麼子類的構造方法會出現什麼現象?
報錯
解決方法:
A:在父類中加一個無參構造方法
B:經過使用super關鍵字去顯示的調用父類的帶參構造方法
C:子類經過this去調用本類的其餘構造方法
子類中必定要有一個去訪問父類的構造方法,不然父類數據就沒 有初始化。
注意事項;
this(...)或者super(...)必須出如今第一條語句上。
不然就可能對父類的數據進行了屢次初始化
子類中的方法和父類中的方法聲明同樣
經過子類調用方法:
·先找子類中,看有沒有這個方法,有就使用
·再看父類中,看有沒有這個方法,有就是用
·若是沒有就報錯(不去看父親的父親)
方法重寫:子類中出現了和父類中方法聲明如出一轍的方法
(區別於方法重載,方法重載僅僅是方法名同樣)
子類重寫的應用:當子類須要父類的功能,而功能主體子類又有本身特有的內容時,這樣既沿襲了父類的功能,又定義了子類特有的功能
super.方法名(參數名); //避免重複代碼
final 關鍵字聲明類能夠把類定義爲不能繼承的,即最終類;
或者用於修飾方法,該方法不能被子類重寫:
Final修飾變量的初始化時機
·被final修飾的變量只能賦值一次
·在構造方法完畢前(非靜態的常量)
//聲明方法 final class 類名{//類體} //聲明類 修飾符(public/private/default/protected) final 返回值類型 方法名(){//方法體}
若是內容中有什麼不足,或者錯誤的地方,歡迎你們給我留言提出意見, 蟹蟹你們 !^_^
若是能幫到你的話,那就來關注我吧!
在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤一個堅持推送原創Java技術的公衆號:理想二旬不止