亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java中方法重寫和方法重載的6個(gè)區(qū)別

 更新時(shí)間:2022年01月12日 09:53:16   作者:Java-老兵  
方法重寫和方法重載都是面向?qū)ο缶幊讨校敲捶椒ㄖ貙懞头椒ㄖ剌d有哪些區(qū)別,本文就詳細(xì)的來介紹一下,感興趣的可以了解一下

方法重寫(Override)和方法重載(Overload)都是面向?qū)ο缶幊讨?,多態(tài)特性的不同體現(xiàn),但二者本身并無關(guān)聯(lián),它們的區(qū)別猶如馬德華之于劉德華的區(qū)別,除了名字長得像之外,其他的都不像。 

接下來咱們就來扒一下二者的具體區(qū)別。

1.方法重寫

方法重寫(Override)是一種語言特性,它是多態(tài)的具體表現(xiàn),它允許子類重新定義父類中已有的方法,且子類中的方法名和參數(shù)類型及個(gè)數(shù)都必須與父類保持一致,這就是方法重寫。

1.1 基本用法

方法重寫的基本用法如下:

/**
 * 父類中有一個(gè) method 方法
 */
class Father {
    public void method(String name) {
        System.out.println("Father:" + name);
    }
}
/**
 * 子類中重寫了父類的 method 方法
 */
class Son extends Father {
    @Override
    public void method(String name) {
        // 子類中重新定義了打印的行為,不再是 Father:XXX,而是 Son:XXX
        System.out.println("Son:" + name);
    }
}

1.2 使用場景

方法重寫在 Java 中應(yīng)用的場景有很多,其中比較經(jīng)典的是 Object 類中的 equals 方法。 Object 是所有類的父類,equals 方法在 Object 類中的實(shí)現(xiàn)源碼如下: 

image.png

 從上述源碼可以看出,Object 類中的 equals 是用來比較兩個(gè)對(duì)象的引用地址是否相同的。 但對(duì)于字符串來說,它是被 final 修飾的,所以每次創(chuàng)建的字符串引用地址都不同,那這時(shí)比較引用地址就沒意義了,所以 String 類必須重寫父類 Object 中的 equals 方法,具體源碼如下: 

image.png

 通過上述代碼我們可以看出,String 中的 equals 方法,已經(jīng)不是比較兩個(gè)字符串的引用地址是否相同了,而是判斷兩個(gè)字符串的值是否相同。

1.3 注意事項(xiàng)

在方法重寫時(shí)需要注意的事項(xiàng)有以下 5 個(gè):

  • 注意事項(xiàng) 1:子類方法的權(quán)限控制符不能變小,也就是如果父類方法的權(quán)限控制符是 protected,那么子類的方法權(quán)限控制符只能是 protected 或 public;
  • 注意事項(xiàng) 2:子類方法返回的類型只能變小,也就是說如果父類方法返回的是 Number 類型,那么子類方法只能返回 Number 類型或 Number 類的子類 Long 類型,而不能返回 Number 類型的父類類型 Object;
  • 注意事項(xiàng) 3:子類拋出異常的類型只能變??;
  • 注意事項(xiàng) 4:子類方法名必須和父類方法名保持一致;
  • 注意事項(xiàng) 5:子類方法的參數(shù)類型和個(gè)數(shù)必須和父類保持一致。

2.方法重載

方法重載是指在同一個(gè)類中,定義了多個(gè)同名方法,但同名方法的參數(shù)類型或參數(shù)個(gè)數(shù)不同就是方法重載。

2.1 基本使用

以下 4 個(gè) method 方法就是方法重載:

public class OverloadExample {
    public static void method() {
        // doSomething
    }
 
    public static void method(String name) {
        // doSomething
    }
 
    public static void method(Integer id) {
        // doSomething
    }
 
    public static void method(Integer id, String name) {
        // doSomething
    }
}

2.2 使用場景

方法重載的經(jīng)典使用場景是 String 類型的 valueOf 方法,valueOf 方法重載有 9 種實(shí)現(xiàn),如下圖所示: 

image.png

 它可以將數(shù)組、對(duì)象和基礎(chǔ)數(shù)據(jù)類型轉(zhuǎn)換成字符串類型。

2.3 注意事項(xiàng)

方法重載的優(yōu)先匹配原則有以下 5 個(gè):

  • 第 1 匹配原則:優(yōu)先匹配相同數(shù)據(jù)類型,方法重載會(huì)優(yōu)先調(diào)用和方法參數(shù)類型一模一樣的方法,比如只有一個(gè) String 類型的參數(shù)調(diào)用,會(huì)優(yōu)先匹配只有一個(gè) String 參數(shù)類型的重載方法;
  • 第 2 匹配原則:如果是基本數(shù)據(jù)類型,會(huì)自動(dòng)轉(zhuǎn)換成更大的基本數(shù)據(jù)類型進(jìn)行匹配,比如調(diào)用的參數(shù)是 int 類型,那么會(huì)優(yōu)先調(diào)用基本類型 long,而非包裝類型 Integer(這點(diǎn)需要特殊注意,容易出錯(cuò))。
  • 第 3 匹配原則:自動(dòng)裝箱和自動(dòng)拆箱匹配,參數(shù)調(diào)用也會(huì)進(jìn)行自動(dòng)拆箱和自動(dòng)裝箱的方法匹配,比如調(diào)用參數(shù)傳遞的是 int 類型,那么它可以匹配到 Integer 類型的重載方法;
  • 第 4 匹配原則:會(huì)按照繼承路線依次向上匹配父類,如果匹配不到當(dāng)前類,會(huì)嘗試匹配它的父類,或者是父類的父類,依次往上匹配;
  • 第 5 匹配原則:可變參數(shù)匹配,如果方法是可選參數(shù)方法,那么它的調(diào)用優(yōu)先級(jí)是最低的,在最后階段才會(huì)匹配可選參數(shù)方法。

方法重載會(huì)按照以上的 5 個(gè)原則依次進(jìn)行匹配,符合規(guī)則的方法會(huì)被優(yōu)先調(diào)用。除了以上匹配原則之外,還需要特殊注意一點(diǎn),不同的返回類型不能作為方法重載的依據(jù),也就是不同的返回值類型不算方法重載

3.方法重寫 VS 方法重載

方法重寫和方法重載的具體不同,主要體現(xiàn)在以下 6 個(gè)方面:

區(qū)別方法重寫方法重載
方法關(guān)系描述的是父類和子類的方法關(guān)系描述的是同一個(gè)類中多個(gè)同名方法的方法關(guān)系
Override 關(guān)鍵字需要使用 @Override 關(guān)鍵字修飾不需要
參數(shù)類型和參數(shù)個(gè)數(shù)不能修改必須修改
返回類型只能變小或相同,不能變大可修改
拋出異常只能變小或刪除,不能拋出新的或者更大的異常可修改
權(quán)限控制符只能變大,不能變小可修改

總結(jié)

方法重寫(Override)和方法重載(Overload)都是面向?qū)ο缶幊讨?,多態(tài)特性的不同體現(xiàn),方法重寫描述的是父類和子類的方法關(guān)系,而方法重載描述的是同一個(gè)類中多個(gè)同名方法的方法關(guān)系。除此之外方法重寫和方法重載還有:Override 關(guān)鍵字、參數(shù)類型和參數(shù)個(gè)數(shù)、返回類型、拋出異常和權(quán)限控制符等不同點(diǎn)。?

到此這篇關(guān)于詳解Java中方法重寫和方法重載的6個(gè)區(qū)別的文章就介紹到這了,更多相關(guān)Java 方法重寫和方法重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot?快速實(shí)現(xiàn)?api?接口加解密功能

    SpringBoot?快速實(shí)現(xiàn)?api?接口加解密功能

    在項(xiàng)目中,為了保證數(shù)據(jù)的安全,我們常常會(huì)對(duì)傳遞的數(shù)據(jù)進(jìn)行加密,Spring?Boot接口加密,可以對(duì)返回值、參數(shù)值通過注解的方式自動(dòng)加解密,這篇文章主要介紹了SpringBoot?快速實(shí)現(xiàn)?api?接口加解密功能,感興趣的朋友一起看看吧
    2023-10-10
  • java獲取文件編碼,jsoup獲取html純文本操作

    java獲取文件編碼,jsoup獲取html純文本操作

    這篇文章主要介紹了java獲取文件編碼,jsoup獲取html純文本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot服務(wù)器端解決跨域問題

    SpringBoot服務(wù)器端解決跨域問題

    這篇文章主要介紹了SpringBoot服務(wù)器端解決跨域問題,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • MyBatis中正則使用foreach拼接字符串

    MyBatis中正則使用foreach拼接字符串

    這篇文章主要介紹了MyBatis中正則使用foreach拼接字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 詳談jvm--Java中init和clinit的區(qū)別

    詳談jvm--Java中init和clinit的區(qū)別

    下面小編就為大家?guī)硪黄斦刯vm--Java中init和clinit的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java List接口的集合使用詳解

    Java List接口的集合使用詳解

    這篇文章主要介紹了Java集合操作之List接口及其實(shí)現(xiàn)方法,詳細(xì)分析了Java集合操作中List接口原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2021-08-08
  • Java 多層嵌套JSON類型數(shù)據(jù)全面解析

    Java 多層嵌套JSON類型數(shù)據(jù)全面解析

    這篇文章主要介紹了Java 多層嵌套JSON類型數(shù)據(jù)全面解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 關(guān)于kafka消費(fèi)不到遠(yuǎn)程bootstrap-server?數(shù)據(jù)的問題

    關(guān)于kafka消費(fèi)不到遠(yuǎn)程bootstrap-server?數(shù)據(jù)的問題

    很多朋友遇到kafka消費(fèi)不到遠(yuǎn)程bootstrap-server?數(shù)據(jù)的問題,怎么解決這個(gè)問題,很多朋友不知所措,下面小編給大家?guī)砹岁P(guān)于kafka消費(fèi)不到遠(yuǎn)程bootstrap-server?數(shù)據(jù)的問題及解決方法,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • MyBatis-Spring配置的講解

    MyBatis-Spring配置的講解

    今天小編就為大家分享一篇關(guān)于MyBatis-Spring配置的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java循環(huán)對(duì)bean的屬性進(jìn)行賦值的實(shí)現(xiàn)

    Java循環(huán)對(duì)bean的屬性進(jìn)行賦值的實(shí)現(xiàn)

    本文主要介紹了Java循環(huán)對(duì)bean的屬性進(jìn)行賦值,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論