五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java零基礎(chǔ)快速入門|Super(上)

2021-02-19 10:27 作者:動(dòng)力節(jié)點(diǎn)小王本王  | 我要投稿



本篇文章主要內(nèi)容

super?概述

super?使用在構(gòu)造方法中


學(xué)習(xí)目標(biāo)

掌握super?都可以用在哪里?理解super 在內(nèi)存方面的存儲(chǔ)位置。掌握怎么通過子類的構(gòu)造方法調(diào)用父類的構(gòu)造方法。super 什么時(shí)候可以省略,什么時(shí)候不能省略?

?

知識(shí)框架

super?概述

super this 可以對(duì)比著學(xué)習(xí):

this

  • this?是一個(gè)引用,保存內(nèi)存地址指向自己。

  • this?出現(xiàn)在實(shí)例方法中,誰調(diào)用這個(gè)實(shí)例方法,this?就代表誰,this?代表當(dāng)前正在執(zhí)行這個(gè)動(dòng)作的對(duì)象。

  • this?不能出現(xiàn)在靜態(tài)方法中。

  • this?大部分情況下可以省略,在方法中區(qū)分實(shí)例變量和局部變量的時(shí)候不能省略。

  • this(實(shí)際參數(shù)列表)”出現(xiàn)在構(gòu)造方法第一行,通過當(dāng)前的構(gòu)造方法去調(diào)用本類當(dāng)中其它的構(gòu)造方法。

super

  • 嚴(yán)格來說,super?其實(shí)并不是一個(gè)引用,它只是一個(gè)關(guān)鍵字,super?代表了當(dāng)前對(duì)象中從父類繼承過來的那部分特征。this?指向一個(gè)獨(dú)立的對(duì)象,super?并不是指向某個(gè)“獨(dú)立”的對(duì)象,假設(shè)張大明是父親,張小明是兒子,有這樣一句話:大家都說張小明的眼睛、鼻子和父親的很像。那么也就是說兒子繼承了父親的眼睛和鼻子特征,那么眼睛和鼻子肯定最終還是長在兒子的身上。假設(shè)this 指向張小明,那么super?就代表張小明身上的眼睛和鼻子。換句話說super?實(shí)是this?的一部分。如下圖所示:張大明和張小明其實(shí)是兩個(gè)獨(dú)立的對(duì)象,兩個(gè)對(duì)象內(nèi)存方面沒有聯(lián)系,super?只是代表張小明對(duì)象身上的眼睛和鼻子,因?yàn)檫@個(gè)是從父類中繼承過來的,在內(nèi)存方面使用了super?關(guān)鍵字進(jìn)行了標(biāo)記, 對(duì)于下圖來說“this.眼睛”和“super.眼睛”都是訪問的同一塊內(nèi)存空間。

super 內(nèi)存圖
  • super?this?都可以使用在實(shí)例方法當(dāng)中。

  • super?不能使用在靜態(tài)方法當(dāng)中,因?yàn)?/span>super?代表了當(dāng)前對(duì)象上的父類型特征, 靜態(tài)方法中沒有this,肯定也是不能使用super?的。

  • super?也有這種用法:“super(實(shí)際參數(shù)列表);”,這種用法是通過當(dāng)前的構(gòu)造方法調(diào)用父類的構(gòu)造方法。

接下來,我們來測(cè)試一下:

編譯報(bào)錯(cuò)了:

this 可以單獨(dú)輸出,super 不能

通過以上的測(cè)試,可以看出 this 是可以單獨(dú)使用的引用,但super 無法輸出,編譯器提示super 要使用必須是“super.xxx”,顯然 super 并不指向獨(dú)立的對(duì)象,并不是保存某個(gè)對(duì)象的內(nèi)存地址。

再來看另外的一個(gè)測(cè)試:

編譯報(bào)錯(cuò)了:

this 和super 都不能使用在靜態(tài)方法中

通過以上的測(cè)試,可以看出this super 都是無法使用在靜態(tài)方法當(dāng)中的。

?

super?使用在構(gòu)造方法中

super??使用在構(gòu)造方法中,語法格式為:super(實(shí)際參數(shù)列表),這行代碼和“this(實(shí)際參數(shù)列表)”都是只允許出現(xiàn)在構(gòu)造方法第一行(這一點(diǎn)記住就行了),所以這兩行代碼是無法共 存的。“super(實(shí)際參數(shù)列表)”這種語法表示子類構(gòu)造方法執(zhí)行過程中調(diào)用父類的構(gòu)造方法。我們來看一段代碼:

運(yùn)行結(jié)果如下圖所示:

運(yùn)行結(jié)果

我們把上面的代碼片段拿過來放在一起看看:

父類的構(gòu)造方法:

子類的構(gòu)造方法:

你有沒有察覺到子類的構(gòu)造方法前三行代碼和父類構(gòu)造方法中的代碼是一樣的?

接下來把子類的構(gòu)造方法修改一下,然后再運(yùn)行測(cè)試程序:

運(yùn)行結(jié)果如下圖所示:

運(yùn)行結(jié)果

通過以上代碼的學(xué)習(xí),“super(實(shí)際參數(shù)列表);”語法表示調(diào)用父類的構(gòu)造方法,代碼復(fù)用性增強(qiáng)了,另外一方面也是模擬現(xiàn)實(shí)世界當(dāng)中的“要想有兒子,必須先有父親”的道理。不過這里的“super(實(shí)際參數(shù)列表)”在調(diào)用父類構(gòu)造方法的時(shí)候,從本質(zhì)上來說并不是創(chuàng)建一個(gè)“獨(dú)立的父類對(duì)象”,而是為了完成當(dāng)前對(duì)象的父類型特征的初始化操作。或者說通過子類的構(gòu)造方法調(diào)用父類的構(gòu)造方法,是為了讓張小明身上長出具有他父親特點(diǎn)的鼻子和眼睛,鼻子和眼睛初始化完畢之后,具有父親的特點(diǎn),但最終還是長在張小明的身上)

接下來,再來看一段代碼:

運(yùn)行結(jié)果如下圖所示:

super()的測(cè)試

通過以上運(yùn)行結(jié)果可以得出以下的等效代碼:

運(yùn)行結(jié)果如下圖所示:

super()的測(cè)試

? ??通過以上代碼的測(cè)試我們得出,當(dāng)一個(gè)構(gòu)造方法第一行沒有顯示的調(diào)用“super(實(shí)際參數(shù) 列表)”的話,系統(tǒng)默認(rèn)調(diào)用父類的無參數(shù)構(gòu)造方法“super()”。當(dāng)然前提是“this(實(shí)際參數(shù)列)”也沒有顯示的去調(diào)用因?yàn)?/span>?super()this()都只能出現(xiàn)在構(gòu)造方法第一行,所以不能并存。們可以通過以下程序再次測(cè)試一下:

編譯報(bào)錯(cuò)了:

編譯報(bào)錯(cuò)信息

以上程序?yàn)槭裁磿?huì)編譯報(bào)錯(cuò)呢?原因是B 類的構(gòu)造方法第一行默認(rèn)會(huì)調(diào)用“super()”,而super()會(huì)調(diào)用父類 A 的無參數(shù)構(gòu)造方法,但由于父類 A 中提供了有參數(shù)構(gòu)造方法,導(dǎo)致無參數(shù)構(gòu)造方法不存在,從而編譯報(bào)錯(cuò)了。所以在實(shí)際開發(fā)中還是建議程序員將無參數(shù)構(gòu)造方法顯示的定義出來,這樣就可以避免對(duì)象的創(chuàng)建失敗了。

另外,通過以上內(nèi)容的學(xué)習(xí),還可以得出這樣的結(jié)論:在 java 語言當(dāng)中無論是創(chuàng)建哪個(gè)Java

對(duì)象,老祖宗Object 類中的無參數(shù)構(gòu)造方法是必然執(zhí)行的。

接下來我們?cè)賮砜匆幌拢阂粋€(gè) java 對(duì)象在創(chuàng)建過程中比較完整的內(nèi)存圖是如何變化的,請(qǐng)先看以下代碼:


運(yùn)行結(jié)果如下圖所示:

運(yùn)行結(jié)果

以上程序創(chuàng)建Worker 對(duì)象時(shí)構(gòu)造方法的執(zhí)行順序是:

  1. 先執(zhí)行Object?類的無參數(shù)構(gòu)造方法;

  2. 再執(zhí)行People?類的構(gòu)造方法;

  3. 最后執(zhí)行Worker?類的構(gòu)造方法;

注意:雖然執(zhí)行了三個(gè)構(gòu)造方法,但是對(duì)象實(shí)際上只創(chuàng)建了一個(gè)Worker以上程序的內(nèi)存結(jié)構(gòu)圖是這樣變化的:

程序執(zhí)行內(nèi)存圖

通過以上內(nèi)容的學(xué)習(xí),super()的作用主要是:第一,調(diào)用父類的構(gòu)造方法,使用這個(gè)構(gòu)造方法來給當(dāng)前子類對(duì)象初始化父類型特征;第二,代碼復(fù)用。


最后附Java零基礎(chǔ)視頻教程給大家,配合學(xué)習(xí)效果更佳?。?/strong>



Java零基礎(chǔ)快速入門|Super(上)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
苍南县| 鄱阳县| 碌曲县| 泸州市| 黑龙江省| 贞丰县| 安泽县| 通海县| 松原市| 霍城县| 怀远县| 宾川县| 逊克县| 盐津县| 香港| 晋城| 荥经县| 晋宁县| 海林市| 章丘市| 武定县| 会昌县| 麟游县| 文水县| 牙克石市| 洛川县| 乌兰察布市| 济宁市| 仁化县| 汪清县| 浦江县| 安吉县| 怀来县| 南安市| 石城县| 乌兰察布市| 青田县| 平利县| 马龙县| 汪清县| 太仆寺旗|