摘要:重寫(xiě)繼承的主要特性是子類(lèi)可以根據(jù)父類(lèi)已有功能的基礎(chǔ)上進(jìn)行擴(kuò)展,但是也有可能對(duì)父類(lèi)的屬性和方法進(jìn)行重寫(xiě)覆寫(xiě)。方法的重寫(xiě)當(dāng)子類(lèi)定義了與父類(lèi)方法名稱(chēng)相同,參數(shù)列表相同以及返回值相同時(shí),我們稱(chēng)之為方法的重寫(xiě)。
重寫(xiě)(Override)
繼承的主要特性是子類(lèi)可以根據(jù)父類(lèi)已有功能的基礎(chǔ)上進(jìn)行擴(kuò)展,但是也有可能對(duì)父類(lèi)的屬性和方法進(jìn)行重寫(xiě)/覆寫(xiě)。
方法的重寫(xiě)當(dāng)子類(lèi)定義了與父類(lèi)方法名稱(chēng)相同,參數(shù)列表相同以及返回值相同時(shí),我們稱(chēng)之為方法的重寫(xiě)。
重寫(xiě)是子類(lèi)對(duì)父類(lèi)的允許訪問(wèn)的方法的實(shí)現(xiàn)過(guò)程進(jìn)行重新編寫(xiě), 返回值和形參都不能改變。即外殼不變,核心重寫(xiě)!
方法的重寫(xiě)規(guī)則
參數(shù)列表必須完全與被重寫(xiě)方法的相同;
返回類(lèi)型必須完全與被重寫(xiě)方法的返回類(lèi)型相同;
訪問(wèn)權(quán)限不能比父類(lèi)中被重寫(xiě)的方法的訪問(wèn)權(quán)限更低。例如:如果父類(lèi)的一個(gè)方法被聲明為public,那么在子類(lèi)中重寫(xiě)該方法就不能聲明為protected。
父類(lèi)的成員方法只能被它的子類(lèi)重寫(xiě)。
聲明為final的方法不能被重寫(xiě)。
聲明為static的方法不能被重寫(xiě),但是能夠被再次聲明。
子類(lèi)和父類(lèi)在同一個(gè)包中,那么子類(lèi)可以重寫(xiě)父類(lèi)所有方法,除了聲明為private和final的方法。
子類(lèi)和父類(lèi)不在同一個(gè)包中,那么子類(lèi)只能夠重寫(xiě)父類(lèi)的聲明為public和protected的非final方法。
重寫(xiě)的方法能夠拋出任何非強(qiáng)制異常,無(wú)論被重寫(xiě)的方法是否拋出異常。但是,重寫(xiě)的方法不能拋出新的強(qiáng)制性異常,或者比被重寫(xiě)方法聲明的更廣泛的強(qiáng)制性異常,反之則可以。
構(gòu)造方法不能被重寫(xiě)。
如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法。
重載(Overload)重載(overloading) 是在一個(gè)類(lèi)里面,方法名字相同,而參數(shù)不同。返回類(lèi)型可以相同也可以不同。
每個(gè)重載的方法(或者構(gòu)造函數(shù))都必須有一個(gè)獨(dú)一無(wú)二的參數(shù)類(lèi)型列表。
重載規(guī)則:
被重載的方法必須改變參數(shù)列表(參數(shù)個(gè)數(shù)或類(lèi)型不一樣);
被重載的方法可以改變返回類(lèi)型,但無(wú)法以返回值類(lèi)型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。
被重載的方法可以改變?cè)L問(wèn)修飾符;
被重載的方法可以聲明新的或更廣的檢查異常;
方法能夠在同一個(gè)類(lèi)中或者在一個(gè)子類(lèi)中被重載。
重寫(xiě)與重載之間的區(qū)別區(qū)別點(diǎn) | 重載(Overload) | 重寫(xiě)(Override) |
---|---|---|
參數(shù)列表 | 必須修改 | 不能修改 |
返回類(lèi)型 | 可以修改 | 不能修改 |
異常 | 可以修改 | 可以減少或刪除,一定不能拋出新的或者更廣的異常 |
權(quán)限 | 可以修改 | 一定不能做更嚴(yán)格的限制(可以降低限制) |
方法的重寫(xiě)(Overriding)和重載(Overloading)是java多態(tài)性的不同表現(xiàn),重寫(xiě)是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載可以理解成多態(tài)的具體表現(xiàn)形式。
方法重載是一個(gè)類(lèi)中定義了多個(gè)方法名相同,而他們的參數(shù)的數(shù)量不同或數(shù)量相同而類(lèi)型和次序不同,則稱(chēng)為方法的重載(Overloading)。
方法重寫(xiě)是在子類(lèi)存在方法與父類(lèi)的方法的名字相同,而且參數(shù)的個(gè)數(shù)與類(lèi)型一樣,返回值也一樣的方法,就稱(chēng)為重寫(xiě)(Overriding)。
方法重載是一個(gè)類(lèi)的多態(tài)性表現(xiàn),而方法重寫(xiě)是子類(lèi)與父類(lèi)的一種多態(tài)性表現(xiàn)。
當(dāng)需要在子類(lèi)中調(diào)用父類(lèi)的被重寫(xiě)方法時(shí),要使用super關(guān)鍵字。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73553.html
摘要:重寫(xiě)語(yǔ)言中的定義子類(lèi)方法有一個(gè)方法與父類(lèi)方法的名字相同且參數(shù)類(lèi)型相同。父類(lèi)方法的返回值可以替換掉子類(lèi)方法的返回值。思維導(dǎo)圖參考文檔極客時(shí)間深入拆解虛擬機(jī)是如何執(zhí)行方法調(diào)用的上廣告 原文 回顧Java語(yǔ)言中的重載與重寫(xiě),并且看看JVM是怎么處理它們的。 重載Overload 定義: 在同一個(gè)類(lèi)中有多個(gè)方法,它們的名字相同,但是參數(shù)類(lèi)型不同。 或者,父子類(lèi)中,子類(lèi)有一個(gè)方法與父類(lèi)非私有方...
摘要:對(duì)應(yīng)的代碼接下來(lái)的句是關(guān)鍵部分,兩句分分別把剛剛創(chuàng)建的兩個(gè)對(duì)象的引用壓到棧頂。所以雖然指令的調(diào)用是相同的,但行調(diào)用方法時(shí),此時(shí)棧頂存放的對(duì)象引用是,行則是。這,就是語(yǔ)言中方法重寫(xiě)的本質(zhì)。 類(lèi)初始化 在講類(lèi)的初始化之前,我們先來(lái)大概了解一下類(lèi)的聲明周期。如下圖 類(lèi)的聲明周期可以分為7個(gè)階段,但今天我們只講初始化階段。我們我覺(jué)得出來(lái)使用和卸載階段外,初始化階段是最貼近我們平時(shí)學(xué)的,也是筆試...
摘要:中,任何未處理的受檢查異常強(qiáng)制在子句中聲明。運(yùn)行時(shí)多態(tài)是面向?qū)ο笞罹璧臇|西,要實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)需要方法重寫(xiě)子類(lèi)繼承父類(lèi)并重寫(xiě)父類(lèi)中已 1、簡(jiǎn)述Java程序編譯和運(yùn)行的過(guò)程:答:① Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼--字節(jié)碼,創(chuàng)建完源文件之后,程序會(huì)先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運(yùn)行這個(gè) .c...
摘要:中,任何未處理的受檢查異常強(qiáng)制在子句中聲明。運(yùn)行時(shí)多態(tài)是面向?qū)ο笞罹璧臇|西,要實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)需要方法重寫(xiě)子類(lèi)繼承父類(lèi)并重寫(xiě)父類(lèi)中已 1、簡(jiǎn)述Java程序編譯和運(yùn)行的過(guò)程:答:① Java編譯程序?qū)ava源程序翻譯為JVM可執(zhí)行代碼--字節(jié)碼,創(chuàng)建完源文件之后,程序會(huì)先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運(yùn)行這個(gè) .c...
閱讀 2960·2021-11-24 09:39
閱讀 3269·2021-11-19 10:00
閱讀 1609·2021-10-27 14:17
閱讀 1888·2021-10-14 09:43
閱讀 1047·2021-09-03 10:30
閱讀 3484·2019-08-30 15:54
閱讀 2818·2019-08-30 13:05
閱讀 2108·2019-08-30 11:02