最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java方法重載和重寫原理區(qū)別解析

 更新時(shí)間:2020年11月13日 11:01:36   作者:Dream0000  
這篇文章主要介紹了Java方法重載和重寫原理區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

java中的方法重載和方法重寫有很多區(qū)別。 下面給出了方法重載和方法覆蓋之間的差異列表:

編號(hào) 方法重載 方法重寫
1 方法重載用于提高程序的可讀性。 方法重寫用于提供已經(jīng)由其超類提供的方法的特定實(shí)現(xiàn)。
2 方法重載在類內(nèi)執(zhí)行。 方法重寫發(fā)生在具有IS-A(繼承)關(guān)系的兩個(gè)類中。
3 在方法重載的情況下,參數(shù)必須不同。 在方法重寫的情況下,參數(shù)必須相同。
4 方法重載是編譯時(shí)多態(tài)性的例子。 方法重寫/覆蓋是運(yùn)行時(shí)多態(tài)性的例子。
5 在java中,方法重載不能僅通過改變方法的返回類型來執(zhí)行。方法重載中的返回類型可以相同或不同。 但是必須更改參數(shù)類型。 在方法重寫/覆蓋中返回類型必須相同或協(xié)變。

Java方法重載示例

class OverloadingExample {
  static int add(int a, int b) {
    return a + b;
  }

  static int add(int a, int b, int c) {
    return a + b + c;
  }
}

Java方法覆蓋示例

class Animal {
  void eat() {
    System.out.println("eating...");
  }
}

class Dog extends Animal {
  void eat() {
    System.out.println("eating bread...");
  }
}

大家看看上面的代碼,帶著疑問接著看下面的文章會(huì)更有效果

一、方法重寫(0verride)

在Java 程序中,類的繼承關(guān)系可以產(chǎn)生一個(gè)子類,子類繼承父類,它具備了父類所有的特征,繼承了父類所有的方法和變量。

子類可以定義新的特征,當(dāng)子類需要修改父類的一些方法進(jìn)行擴(kuò)展,增大功能,程序設(shè)計(jì)者常常把這樣一種操作方法稱為重寫,也可以叫覆寫或覆蓋。

所以,所謂方法的重寫是指子類中的方法和父類中繼承的方法有完全相同的返回值類型、方法名、參數(shù)個(gè)數(shù)和參數(shù)類型。這樣就可以實(shí)現(xiàn)對(duì)父類方法的覆蓋。

如果子類將父類的方法重寫了,調(diào)用的時(shí)候肯定是調(diào)用被重寫過的子類的方法,但是如果要還要繼續(xù)調(diào)用父類的方法我們該怎么做呢?

此時(shí)通過 super 關(guān)鍵字可以實(shí)現(xiàn)這個(gè)功能。super 關(guān)鍵字可以從子類訪問父類中的內(nèi)容,如果要訪問被重寫過的方法,使用“super.(參數(shù)列表)” 的形式調(diào)用即可。

當(dāng)然,如果要使用 super 關(guān)鍵字不一定非要在方法重寫后使用,也可以明確的表示某個(gè)方法是從父類中繼承而來的。使用 super 只是更加明確的說,要從父類中查找,就不在子類中查找了。

重寫有以下規(guī)則

(1).父方方法的參數(shù)列表必須完全與被子類重寫的方法的參數(shù)列表相同,否則不能稱其為重寫而是重載。

(2).父類返回的類型必須與被子類重寫的方法的參數(shù)列表相同,否則不能稱其為重寫而是重載。

(3).Java 中規(guī)定,被子類重寫的方法不能擁有比父類方法更加樣額的訪問權(quán)限。

編寫過Java程序的人應(yīng)該都知道,父類的中方法并不是在任何情況下都可以重寫的,當(dāng)父類中的方法訪問權(quán)限修飾符為 private時(shí),該方法只能被自己的類訪問,不能被外部訪問,在子類是不能被重寫的。如果定義父類的方法為 public,在子類定義為private 程序運(yùn)行就會(huì)出錯(cuò)。

(4).由于父類的訪問權(quán)限修飾符限制一定要大于被子類重寫的方法的訪問權(quán)限修飾符,而 private 權(quán)限最小,所以如果某一個(gè)方法在父類的訪問權(quán)限是 private 時(shí),那么就不能再子類中對(duì)其進(jìn)行重寫。如果重寫定義,也只是定義了一個(gè)新的方法,不會(huì)達(dá)到重寫的效果。

(5).在繼承過程中如果父類當(dāng)中的方法拋出異常,那么在子類中重寫父類的該方法時(shí),也要拋出異常。而且拋出的異常不能多于父類中拋出的異常(可以等于父類中拋出的異常)。換句話說,重寫方法一定不能拋出新的檢查異常,或者比被重寫方法聲明更加寬泛的檢查異常。

例如:父類的一個(gè)方法申明了一個(gè)檢查異常 IOException ,在重寫這個(gè)方法時(shí)就不能拋出 Exception,只能拋出 IOException的子類異常,可以拋出非檢查異常。同樣的道理,如果子類創(chuàng)建了一個(gè)成員變量,而該變量和父類中一個(gè)變量名稱相同,稱作變量重寫或者屬性覆蓋(這個(gè)概念一般很少人研究,意義不大)。

二、方法重載(ordeloading)

概念:所謂的方法重載是指在一個(gè)類中,多個(gè)方法的方法名相同,但是參數(shù)列表不同。參數(shù)列表不同指的是參數(shù)個(gè)數(shù)、參數(shù)類型或者參數(shù)的順序不同。

方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。調(diào)用方法時(shí)通過傳遞給它們的不同個(gè)數(shù)和參數(shù)來決定具體使用哪個(gè)方法,這就是Java中的多態(tài)。

在方法重載時(shí),方法之間需要存在一定的聯(lián)系,因?yàn)檫@樣可以提高程序的可讀性,一般只重載功能相似的方法。

我們可以定義一些名稱相同的方法,再通過定義不同的參數(shù)來區(qū)分方法,然后在調(diào)用時(shí),Java 虛擬機(jī)就會(huì)根據(jù)不同的參數(shù)列表來選擇合適的方法執(zhí)行。也就是說,當(dāng)一個(gè)重載的方法被調(diào)用時(shí),Java 用參數(shù)類型或者個(gè)數(shù)來決定世界調(diào)用的重載方法。因此,每個(gè)重載方法的參數(shù)的類型或者個(gè)數(shù)必須不同。

雖然每個(gè)重載的方法可以有不同的返回類型,但返回類型并不足以區(qū)分所使用的是哪個(gè)方法。

當(dāng)Java 調(diào)用一個(gè)重載方法時(shí),參數(shù)與調(diào)用參數(shù)匹配的方法被執(zhí)行。在使用重載要注意以下幾點(diǎn):

(1).在使用重載時(shí)只能通過不同的參數(shù)列表,必須具有不同的參數(shù)列表

(2).不能通過訪問權(quán)限、返回類型、拋出的異常進(jìn)行重載

(3).方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響。

(4).可以有不同的返回值類型,只要參數(shù)列表不同就可以

(5).可以有不同的訪問修飾符

(6).可以拋出不同的異常

三、方法重寫和重載的區(qū)別

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表

    這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java?Spring中Bean的作用域及生命周期

    Java?Spring中Bean的作用域及生命周期

    這篇文章主要介紹了Java?Spring中Bean的作用域及生命周期,Bean的作用域默認(rèn)是單例模式的,也就是說所有?的使?的都是同?個(gè)對(duì)象,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-08-08
  • IntelliJ IDEA中如何構(gòu)建Spring Boot的項(xiàng)目

    IntelliJ IDEA中如何構(gòu)建Spring Boot的項(xiàng)目

    這篇文章主要介紹了IntelliJ IDEA中如何構(gòu)建Spring Boot的項(xiàng)目問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring?Security自定義失敗處理器問題

    Spring?Security自定義失敗處理器問題

    這篇文章主要介紹了Spring?Security自定義失敗處理器問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 一文解讀java.nio.ByteBuffer

    一文解讀java.nio.ByteBuffer

    這篇文章主要介紹了java.nio.ByteBuffer的用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring學(xué)習(xí)教程之AOP模塊的概述

    Spring學(xué)習(xí)教程之AOP模塊的概述

    AOP 從功能的角度來講,可能看作OOP編程方式的一種補(bǔ)充,提供了一種不同的代碼或者系統(tǒng)組織方式,下面這篇文章主要給大家介紹了關(guān)于Spring學(xué)習(xí)教程之AOP模塊的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • 如何使用IDEA創(chuàng)建MAPPER模板過程圖解

    如何使用IDEA創(chuàng)建MAPPER模板過程圖解

    這篇文章主要介紹了如何使用IDEA創(chuàng)建MAPPER模板,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 一文吃透 Spring 中的 AOP 編程

    一文吃透 Spring 中的 AOP 編程

    這篇文章主要介紹了springboot中的AOP編程,本文介紹的非常詳細(xì),有一定的參考價(jià)值,感興趣的小伙伴可以借鑒一下
    2023-04-04
  • Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié)

    Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié)

    java中截取字符串的常用方法是使用String類的substring方法,本文通過實(shí)例代碼給大家介紹Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • SpringBoot使用Cache集成Redis做緩存的保姆級(jí)教程

    SpringBoot使用Cache集成Redis做緩存的保姆級(jí)教程

    Spring Cache是Spring框架提供的一個(gè)緩存抽象層,它簡化了緩存的使用和管理,Spring Cache默認(rèn)使用服務(wù)器內(nèi)存,并無法控制緩存時(shí)長,查找緩存中的數(shù)據(jù)比較麻煩,本文已常用的Redis作為緩存中間件作為示例,詳細(xì)講解項(xiàng)目中如何使用Cache提高系統(tǒng)性能,需要的朋友可以參考下
    2025-01-01

最新評(píng)論

延吉市| 潞西市| 江门市| 大邑县| 扬州市| 大庆市| 东源县| 泊头市| 稻城县| 广南县| 黄大仙区| 平定县| 兴安县| 滦南县| 冷水江市| 得荣县| 当阳市| 温州市| 江北区| 临沧市| 红桥区| 诸暨市| 兴山县| 双峰县| 慈溪市| 阜新| 土默特左旗| 察哈| 冕宁县| 永平县| 明光市| 台湾省| 青海省| 遵义市| 亳州市| 松原市| 来凤县| 峡江县| 仁寿县| 南投市| 思茅市|