无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

Java零基礎(chǔ)快速入門|方法覆蓋

2021-02-18 16:08 作者:動力節(jié)點(diǎn)小王本王  | 我要投稿



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

方法覆蓋Override

什么時候需要方法覆蓋

怎么進(jìn)行方法覆蓋

方法覆蓋的條件及注意事項(xiàng)


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

理解在什么情況下我們需要進(jìn)行方法覆蓋?掌握在滿足什么條件的時候構(gòu)成方法覆蓋? 什么是多態(tài),代碼怎么寫?向上轉(zhuǎn)型和向下轉(zhuǎn)型都是什么?多態(tài)在開發(fā)中有什么作用?


知識框架

?

方法覆蓋 Override

什么時候需要方法覆蓋

學(xué)習(xí)方法覆蓋之前,我們先來回顧一下方法重載overload),什么情況下考慮使用方法 重載呢?在同一個類當(dāng)中,如果功能相似,盡可能將方法名定義的相同,這樣方便調(diào)用的同時 代碼也會美觀。那么,代碼滿足什么條件的時候能夠構(gòu)成方法重載呢?只要在同一個類當(dāng)中, 方法名相同,參數(shù)列表不同類型、個數(shù)、順序),即構(gòu)成方法重載。

帶著同樣的疑問去學(xué)習(xí)方法覆蓋,什么是方法覆蓋?什么情況下考慮方法覆蓋?代碼怎么寫的時候就構(gòu)成了方法覆蓋呢?接下來看一段代碼:

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

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

“中國人”調(diào)用speakHi()方法希望輸出的結(jié)果是“你好,我叫張三,很高興見到你!”, “美國人”調(diào)用speakHi()方法更希望輸出的結(jié)果是“Hi,My?name?is?jackson,Nice?to?meet?you!”,可見 ChinaPeople AmericaPeople 從父類中繼承過來的 speakHi()方法已經(jīng)不夠子類使用了, 那這個時候應(yīng)該怎么辦呢?當(dāng)然,此時就需要使用方法覆蓋機(jī)制了。

?

怎么進(jìn)行方法覆蓋

針對上一小節(jié)的問題,我們應(yīng)該怎么進(jìn)行方法覆蓋呢,請看以下代碼:

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

方法覆蓋之后的運(yùn)行結(jié)果

以上程序中 ChinaPeople AmericaPeople 將從 People?類中繼承過來的 speakHi()方法進(jìn)行了覆蓋,我們也看到了當(dāng) speakHi()方法發(fā)生覆蓋之后,子類對象會調(diào)用覆蓋之后的方法,不會再去調(diào)用之前從父類中繼承過來的方法。

那么,到底在什么情況下我們會考慮使用方法覆蓋呢?通過以上內(nèi)容的學(xué)習(xí),我們了解到只有當(dāng)從父類中繼承過來的方法無法滿足當(dāng)前子類業(yè)務(wù)需求的時候,需要將父類中繼承過來的方法進(jìn)行覆蓋。換句話說,父類中繼承過來的方法已經(jīng)不夠用了,子類有必要將這個方法重新再寫一遍,所以方法覆蓋又被稱為方法重寫。當(dāng)該方法被重寫之后,子類對象一定會調(diào)用重寫之后的方法。


方法覆蓋的條件及注意事項(xiàng)

那么,當(dāng)程序具備哪些條件的時候,就能構(gòu)成方法覆蓋呢?

方法覆蓋發(fā)生在具有繼承關(guān)系的父子類之間,這是首要條件;

覆蓋之后的方法與原方法具有相同的返回值類型、相同的方法名、相同的形式參數(shù)列表;

另外,在使用方法覆蓋的時候,需要有哪些注意事項(xiàng)呢?

由于覆蓋之后的方法與原方法一模一樣,建議在開發(fā)的時候采用復(fù)制粘貼的方式, 不建議手寫,因?yàn)槭謱懙臅r候非常容易出錯,比如在 Object?類當(dāng)中有toString()方法,該方法中的S是大寫的,在手寫的時候很容易寫成小寫 tostring(),這個時候你會認(rèn)為toString() 方法已經(jīng)被覆蓋了,但由于方法名不一致,導(dǎo)致最終沒有覆蓋,這樣就尷尬了;

私有的方法不能被繼承,所以不能被覆蓋;

構(gòu)造方法不能被繼承,所以也不能被覆蓋;

覆蓋之后的方法不能比原方法擁有更低的訪問權(quán)限,可以更高學(xué)習(xí)了訪問控制權(quán)限修飾符之后你就明白了);

覆蓋之后的方法不能比原方法拋出更多的異常,可以相同或更少學(xué)習(xí)了異常之后就明白了);

方法覆蓋只是和方法有關(guān),和屬性無關(guān);

靜態(tài)方法不存在覆蓋不是靜態(tài)方法不能覆蓋,是靜態(tài)方法覆蓋意義不大,學(xué)習(xí)了多態(tài)機(jī)制之后就明白了);

以上的注意事項(xiàng)還需要大家記憶,多下點(diǎn)功夫吧。接下來我們再來看一段代碼,對方法覆 蓋加深一下印象,業(yè)務(wù)需求是這樣的:定義一個動物類,所有動物都有移動的行為,其中貓類 型的對象在移動的時候輸出“貓?jiān)谧哓埐?!”,鳥兒類型的對象在移動的時候輸出“鳥兒在飛 翔!”,但是貓類型的對象具有一個特殊的行為,抓老鼠,這個行為不是所有動物對象都有的, 是貓類型對象特有的:

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

方法覆蓋演示

對方法覆蓋總結(jié)一下,當(dāng)父類中繼承過來的方法無法滿足當(dāng)前子類業(yè)務(wù)需求的時候,子類 有必要將父類中繼承過來的方法進(jìn)行覆蓋/重寫。方法覆蓋發(fā)生在具有繼承關(guān)系的父子類之間, 方法覆蓋的時候要求相同的返回值類型、相同的方法名、相同的形式參數(shù)列表。方法覆蓋之后 子類對象在調(diào)用的時候一定會執(zhí)行覆蓋之后的方法。


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


Java零基礎(chǔ)快速入門|方法覆蓋的評論 (共 條)

分享到微博請遵守國家法律
资中县| 涟源市| 临洮县| 泸溪县| 兴隆县| 佳木斯市| 黑水县| 平南县| 资阳市| 松原市| 伊金霍洛旗| 班玛县| 东兴市| 石首市| 阜南县| 永和县| 福海县| 崇州市| 潍坊市| 山西省| 天柱县| 武汉市| 宁安市| 门源| 恩平市| 彰武县| 临泽县| 沂水县| 平湖市| 聂拉木县| 湘阴县| 昌平区| 廉江市| 永顺县| 钦州市| 中江县| 冀州市| 方城县| 哈巴河县| 左贡县| 阿巴嘎旗|