重寫和重載的區(qū)別

1、方法的重寫(Override)(方法覆蓋)

(1)重寫介紹:

java SE5增加@Override注解,并不是關(guān)鍵字,覆寫某個方法時,添加此注解。@Override可以防止在不想重載時而意外地進(jìn)行重載。

  1. 父類與之類之間的多態(tài)性,對父類的函數(shù)進(jìn)行重新定義。同方法名和同參數(shù);
  2. 子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數(shù)列表,則新方法將覆蓋原有的方法,若需要父類中原有的方法,使用super關(guān)鍵字;
  3. 子類函數(shù)的訪問修飾符不能小于父類的;(父類為public,則子類不能為protected或者private等,只能是public的)
  4. 子類拋出異常小于等于父類方法拋出異常;
  5. 重寫Override,運行時,方法重寫(子類繼承父類并重寫方法)以及對象造型(父引用子類型對象),父子類的多態(tài)性表現(xiàn),是動態(tài)分派,指令invokevirtual,在運行期間根據(jù)常量池中的類方法的符號引用解析到實際的類型上;

(2)兩同兩小一大原則:

兩同:方法名相同,參數(shù)類型相同
兩?。鹤宇惙祷仡愋托∮诘扔诟割惙椒ǚ祷仡愋停?br>    子類拋出異常小于等于父類方法拋出異常,
一大:子類訪問權(quán)限大于等于父類方法訪問權(quán)限。

  1. 參數(shù)列表必須完全與被重寫方法的相同;
  2. 返回類型必須完全與被重寫方法的返回類型相同;(備注:這條信息是標(biāo)準(zhǔn)的重寫方法的規(guī)則,但是在java 1.5 版本之前返回類型必須一樣,1.5(包含)j 版本之后ava放寬了限制,返回類型必須小于或者等于父類方法的返回類型 )。才有了子類返回類型小于等于父類方法返回類型。在java里面這個怎么樣都是正確的,謹(jǐn)記。
  3. 訪問權(quán)限不能比父類中被重寫的方法的訪問權(quán)限更低。例如:如果父類的一個方法被聲明為public,那么在子類中重寫該方法就不能聲明為protected。否則會有以下信息:Cannot reduce the visibility of the inherited method from Base
  4. 父類的成員方法只能被它的子類重寫。
  5. 聲明為final的方法不能被重寫。
  6. 聲明為static的方法不能被重寫,但是能夠被再次聲明。(static和final的都不能被重寫)
  7. 子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了聲明為private和final的方法。
  8. 子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為public和protected的非final方法。
  9. 重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者不能拋出比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
  10. 構(gòu)造方法不能被重寫。(構(gòu)造方法屬于static的)
  11. 如果不能繼承一個方法,則不能重寫這個方法。

2、方法的重載overload

(1)重載介紹

  1. 方法名一樣,但參數(shù)類型和個數(shù)一樣,返回值類型可以相同也可以不同,無法以返回類型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn);
  2. 方法重載就是在類中創(chuàng)建多個方法,方法名相同,參數(shù)列表不同,調(diào)用方法時通過傳遞給它們的不同參數(shù)個數(shù)和參數(shù)類型來決定具體使用哪個方法,體現(xiàn)多態(tài)性;
  3. 方法重載是讓類以統(tǒng)一的方法處理不同類型數(shù)據(jù)(同方法名,不同參數(shù)列表)的一種手段;
  4. 重載overload,編譯時,同一個類中,同名方法有不同參數(shù)列表(個數(shù)、類型),是一個類中多態(tài)性的表現(xiàn),是靜態(tài)分派,在編譯期,通過靜態(tài)類型而不是實際類型作為判定依據(jù)(靜態(tài)方法也可以重載);

(2)構(gòu)造方法的重載

【構(gòu)造方法的重載】:只需要看參數(shù)即可,如果想在一個構(gòu)造方法中調(diào)用另一個構(gòu)造方法,那么可以使用this()的方法調(diào)用,this()括號中的參數(shù)表示目標(biāo)構(gòu)造方法的參數(shù),this()必須要作為構(gòu)造方法的第一跳語句,換句話說,this()之前不能有任何可執(zhí)行的代碼。

3、重寫和重載:(多態(tài))

底層實現(xiàn)(靜態(tài)分派和動態(tài)分派)

  1. 重載overload,編譯時,同一個類中,同名方法有不同參數(shù)列表(個數(shù)、類型),是一個類中多態(tài)性的表現(xiàn),是靜態(tài)分派,在編譯期,通過靜態(tài)類型而不是實際類型作為判定依據(jù)(靜態(tài)方法也可以重載);
  2. 重寫override,運行時,方法重寫(子類繼承父類并重寫方法)以及對象造型(父引用子類型對象),父子類的多態(tài)性表現(xiàn),是動態(tài)分派,指令invokevirtual,在運行期間根據(jù)常量池中的類方法的符號引用解析到實際的類型上;
    多態(tài)
    1.多態(tài)性是面向?qū)ο缶幊痰囊环N特性,和方法無關(guān);
    2.同樣的一個方法能夠根據(jù)輸入數(shù)據(jù)的不同,做出不同的處理,即方法的重載——有不同的參數(shù)列表(靜態(tài)多態(tài)性);
    3.當(dāng)子類繼承自父類的相同方法,輸入數(shù)據(jù)一樣,但要做出有別于父類的響應(yīng)時,你就要覆蓋父類方法, 即在子類中重寫該方法——相同參數(shù),不同實現(xiàn)(動態(tài)多態(tài)性);

4、區(qū)別總結(jié):

單詞:重載overload,重寫loverride;
形式:重載,方法名相同,參數(shù)列表不同(個數(shù)、類型、順序);重寫,方法名、返回值、參數(shù)列表都相同;
范圍:重載,是編譯時的靜態(tài)分派,同一個類中;重寫,運行時動態(tài)分派,發(fā)生在繼承的父子類中;
權(quán)限:重載,沒有權(quán)限限制;重寫,子類的覆寫的方法權(quán)限不能比父類的訪問權(quán)限小;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先說一下什么是重載(Overload):(1) 方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個同名函...
    CharmingWong閱讀 520評論 0 0
  • ** 重寫(overriding)特點** 父類與子類之間的多態(tài)性,對父類的函數(shù)進(jìn)行重新定義。如果在子類中定義某方...
    StrongZhao閱讀 432評論 0 1
  • 重寫: 子類繼承父類以后,對父類中的方法中的方法體進(jìn)行重新定義。 要求: 1.與父類的方法名,返回類型,參數(shù)類型均...
    Dandelions丶ky閱讀 438評論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,642評論 18 399
  • 重寫和重載區(qū)別 重寫方法的規(guī)則如下: 參數(shù)列表:必須與被重寫方法的參數(shù)列表完全匹配。 返回類型:必須與超類中被重寫...
    指尖的跳躍閱讀 859評論 0 2

友情鏈接更多精彩內(nèi)容