摘要:格式子類(lèi)名父類(lèi)名好處提高了代碼的復(fù)用性提高了代碼的維護(hù)性通過(guò)少量的修改,滿(mǎn)足不斷變化的具體要求讓類(lèi)與類(lèi)產(chǎn)生了一個(gè)關(guān)系,是多態(tài)的前提要求有共同的屬性或操作有細(xì)微的差別繼承的弊端讓類(lèi)的耦合性增強(qiáng)。
第二階段 JAVA面向?qū)ο?/strong> 第二章 繼承
其實(shí)在我們面向?qū)ο筮@一階段的學(xué)習(xí)中,我們就是圍繞Java的三大特性(封裝、繼承、多態(tài))來(lái)講解的,在上一掌內(nèi)容中我們講解了一部分封裝的有關(guān)知識(shí),今天我們來(lái)重點(diǎn)學(xué)習(xí)繼承的學(xué)習(xí)。
2.1 繼承的基本認(rèn)識(shí) 概述:繼承就是在一個(gè)已有類(lèi)的基礎(chǔ)上派生出新類(lèi)
子類(lèi)繼承父類(lèi)的特征和行為,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為
(父類(lèi)更通用,子類(lèi)更具體)
功能:有了繼承以后,我們定義一個(gè)類(lèi)的時(shí)候,可以在一個(gè)已經(jīng)存在的類(lèi)的 基礎(chǔ)上,還可以定義自己的新成員。 格式:class 子類(lèi)名 extends 父類(lèi)名 {} 好處:A:提高了代碼的復(fù)用性
B:提高了代碼的維護(hù)性(通過(guò)少量的修改,滿(mǎn)足不斷變化的具體要求)
C:讓類(lèi)與類(lèi)產(chǎn)生了一個(gè)關(guān)系,是多態(tài)的前提
要求:有共同的屬性或操作
有細(xì)微的差別
2.2 繼承的弊端A:讓類(lèi)的耦合性增強(qiáng)。這樣某個(gè)類(lèi)的改變就會(huì)影響其他和該類(lèi)相關(guān)的類(lèi)
·原則:低耦合,高內(nèi)聚。
·耦合:類(lèi)與類(lèi)的關(guān)系
·內(nèi)聚:自己完成某件事情的能力
B:打破了封裝性
特點(diǎn):
A:Java只支持單繼承,不支持多繼承(C++支持)
B:Java支持多層繼承(繼承體系)
兒子繼承爸爸 爸爸繼承爺爺 兒子可以通過(guò)爸爸繼承爺爺
注意:
A: 子類(lèi)只能繼承父類(lèi)所有非私有成員(成員方法和成員變量)
B:子類(lèi)不能繼承父類(lèi)的構(gòu)造方法,但是可以通過(guò)super關(guān)鍵字去訪問(wèn)方法
C: 不要為了部分功能而繼承(多層繼承會(huì)使得子類(lèi)繼承多余的方法)
2.3 Java繼承中的成員關(guān)系A:成員變量
a:子類(lèi)的成員變量名稱(chēng)和父類(lèi)中的成員變量名稱(chēng)不一樣,這個(gè)太簡(jiǎn)單
b:子類(lèi)的成員變量名稱(chēng)和父類(lèi)中的成員變量名稱(chēng)一樣,這個(gè)怎么訪問(wèn)
子類(lèi)的方法訪問(wèn)變量的查找順序:
? ·在子類(lèi)方法的局部范圍找,有就使用。
·在子類(lèi)的成員范圍找,有就使用。
·在父類(lèi)的成員范圍找,有就使用。
·找不到,就報(bào)錯(cuò)。
2.4 Super 關(guān)鍵字不僅要輸出局部范圍的num,還要輸出本類(lèi)成員范圍的num
使用super關(guān)鍵字
this 和super的區(qū)別this 代表本類(lèi)對(duì)應(yīng)的引用
Super 代表父親存儲(chǔ)空間的標(biāo)識(shí)(可以理解為父親引用)可以操作父親 的成員
使用方法:A:調(diào)用成員變量
·this.成員變量 調(diào)用本類(lèi)的成員變量
·super.成員變量 調(diào)用父類(lèi)的成員變量
B:調(diào)用構(gòu)造方法
·this(...) 調(diào)用本類(lèi)的成員變量
·Super(...)調(diào)用父類(lèi)的成員變量
C:調(diào)用成員方法
·this.成員方法 調(diào)用本類(lèi)的成員方法
·super.成員方法 調(diào)用父類(lèi)的成員方法
2.5 繼承中構(gòu)造方法的關(guān)系A:子類(lèi)中所有的構(gòu)造方法默認(rèn)都會(huì)訪問(wèn)父類(lèi)中空參數(shù)的構(gòu)造方法
B:理由:
因?yàn)樽宇?lèi)會(huì)繼承父類(lèi)中的數(shù)據(jù),可能還會(huì)使用父類(lèi)的數(shù)據(jù)
所以,子類(lèi)初始化之前,一定要先完成父類(lèi)數(shù)據(jù)的初始化
注意:子類(lèi)每一個(gè)構(gòu)造方法的第一條語(yǔ)句默認(rèn)都是:super()
如果父類(lèi)沒(méi)有無(wú)參構(gòu)造方法,那么子類(lèi)的構(gòu)造方法會(huì)出現(xiàn)什么現(xiàn)象?
報(bào)錯(cuò)
解決方法:
A:在父類(lèi)中加一個(gè)無(wú)參構(gòu)造方法
B:通過(guò)使用super關(guān)鍵字去顯示的調(diào)用父類(lèi)的帶參構(gòu)造方法
C:子類(lèi)通過(guò)this去調(diào)用本類(lèi)的其他構(gòu)造方法
子類(lèi)中一定要有一個(gè)去訪問(wèn)父類(lèi)的構(gòu)造方法,否則父類(lèi)數(shù)據(jù)就沒(méi) 有初始化。
注意事項(xiàng);
this(...)或者super(...)必須出現(xiàn)在第一條語(yǔ)句上。
否則就可能對(duì)父類(lèi)的數(shù)據(jù)進(jìn)行了多次初始化
2.6 繼承中成員方法的關(guān)系子類(lèi)中的方法和父類(lèi)中的方法聲明一樣
通過(guò)子類(lèi)調(diào)用方法:
·先找子類(lèi)中,看有沒(méi)有這個(gè)方法,有就使用
·再看父類(lèi)中,看有沒(méi)有這個(gè)方法,有就是用
·如果沒(méi)有就報(bào)錯(cuò)(不去看父親的父親)
2.7 方法重寫(xiě)(override)方法重寫(xiě):子類(lèi)中出現(xiàn)了和父類(lèi)中方法聲明一模一樣的方法
(區(qū)別于方法重載,方法重載僅僅是方法名一樣)
子類(lèi)重寫(xiě)的應(yīng)用:當(dāng)子類(lèi)需要父類(lèi)的功能,而功能主體子類(lèi)又有自己特有的內(nèi)容時(shí),這樣既沿襲了父類(lèi)的功能,又定義了子類(lèi)特有的功能
super.方法名(參數(shù)名); //避免重復(fù)代碼
2.8 final關(guān)鍵字final 關(guān)鍵字聲明類(lèi)可以把類(lèi)定義為不能繼承的,即最終類(lèi);
或者用于修飾方法,該方法不能被子類(lèi)重寫(xiě):
Final修飾變量的初始化時(shí)機(jī)
·被final修飾的變量只能賦值一次
·在構(gòu)造方法完畢前(非靜態(tài)的常量)
//聲明方法 final class 類(lèi)名{//類(lèi)體} //聲明類(lèi) 修飾符(public/private/default/protected) final 返回值類(lèi)型 方法名(){//方法體}結(jié)尾:
如果內(nèi)容中有什么不足,或者錯(cuò)誤的地方,歡迎大家給我留言提出意見(jiàn), 蟹蟹大家 !^_^
如果能幫到你的話(huà),那就來(lái)關(guān)注我吧!
在這里的我們素不相識(shí),卻都在為了自己的夢(mèng)而努力 ?一個(gè)堅(jiān)持推送原創(chuàng)Java技術(shù)的公眾號(hào):理想二旬不止
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74671.html
摘要:前言面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問(wèn)題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開(kāi)來(lái),那么這就是你的優(yōu)勢(shì),本系列將講述一些面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 前言 面試中對(duì)于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問(wèn)題你可以立馬找到對(duì)應(yīng)的知識(shí)點(diǎn)擴(kuò)展開(kāi)來(lái),那么這就是你的優(yōu)勢(shì),本系列將講述一些java面試中的事,不會(huì)很詳細(xì),但是應(yīng)該比較全面吧。 主要內(nèi)容 pa...
摘要:現(xiàn)在回到我們這一章節(jié)的標(biāo)題,將它做下補(bǔ)充關(guān)于那些事四之基于構(gòu)架基礎(chǔ)樣式庫(kù)基礎(chǔ)庫(kù)構(gòu)思為什么要做基礎(chǔ)庫(kù)我上一章節(jié)的末尾拋出了幾個(gè)問(wèn)題假設(shè)你要做一個(gè)游戲單頁(yè)面,網(wǎng)頁(yè)上并不存在表單內(nèi)容,那么你就要移除一些冗余的代碼,開(kāi)始自定義樣式來(lái)滿(mǎn)足自己的需求。 前言 先來(lái)回顧一下前幾章節(jié),我們都說(shuō)了哪些內(nèi)容: CSS Reset 歷史 與 Normalize.css 介紹 Normalize.css...
摘要:現(xiàn)在回到我們這一章節(jié)的標(biāo)題,將它做下補(bǔ)充關(guān)于那些事四之基于構(gòu)架基礎(chǔ)樣式庫(kù)基礎(chǔ)庫(kù)構(gòu)思為什么要做基礎(chǔ)庫(kù)我上一章節(jié)的末尾拋出了幾個(gè)問(wèn)題假設(shè)你要做一個(gè)游戲單頁(yè)面,網(wǎng)頁(yè)上并不存在表單內(nèi)容,那么你就要移除一些冗余的代碼,開(kāi)始自定義樣式來(lái)滿(mǎn)足自己的需求。 前言 先來(lái)回顧一下前幾章節(jié),我們都說(shuō)了哪些內(nèi)容: CSS Reset 歷史 與 Normalize.css 介紹 Normalize.css...
摘要:通過(guò)同一個(gè)構(gòu)造函數(shù)實(shí)例化的多個(gè)實(shí)例對(duì)象具有同一個(gè)原型對(duì)象。所以當(dāng)給原型對(duì)象賦值一個(gè)新對(duì)象時(shí),切記將原型對(duì)象的指回原構(gòu)造函數(shù)以上就是本次分享的內(nèi)容,關(guān)于原型對(duì)象的其他知識(shí),下一篇基礎(chǔ)原型對(duì)象的那些事二會(huì)講到。 談起js的基礎(chǔ),繞不過(guò)去的坎就是:原型鏈、作用域鏈、this(em...好吧,還有閉包),今天總結(jié)一下關(guān)于原型對(duì)象的一些知識(shí),供自己和大家復(fù)習(xí)。 概念理解 什么是原型對(duì)象呢?有以下...
閱讀 3577·2023-04-26 02:05
閱讀 2021·2021-11-19 11:30
閱讀 4231·2021-09-30 09:59
閱讀 3184·2021-09-10 10:51
閱讀 2614·2021-09-01 10:30
閱讀 1496·2021-08-11 11:20
閱讀 2626·2019-08-30 15:54
閱讀 572·2019-08-30 10:49