5.Java重載和重寫的區(qū)別

Java 方法重載和方法重寫的區(qū)別有哪些?

解析:先明白重載和重寫的定義。

一、方法重寫(0verride)

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

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

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

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

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

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

重寫有以下規(guī)則

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

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

(3).Java 中規(guī)定,被子類重寫的方法不能擁有比父類方法更加樣額的訪問權限。
編寫過Java程序的人應該都知道,父類的中方法并不是在任何情況下都可以重寫的,當父類中的方法訪問權限修飾符為 private時,該方法只能被自己的類訪問,不能被外部訪問,在子類是不能被重寫的。如果定義父類的方法為 public,在子類定義為private 程序運行就會出錯。

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

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

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

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

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

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

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

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

當Java 調用一個重載方法時,參數(shù)與調用參數(shù)匹配的方法被執(zhí)行。在使用重載要注意以下幾點:

(1).在使用重載時只能通過不同的參數(shù)列表,必須具有不同的參數(shù)列表
(2).不能通過訪問權限、返回類型、拋出的異常進行重載
(3).方法的異常類型和數(shù)目不會對重載造成影響。
(4).可以有不同的返回值類型,只要參數(shù)列表不同就可以
(5).可以有不同的訪問修飾符
(6).可以拋出不同的異常

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

image.png

(參考博客https://www.cnblogs.com/zheting/p/7751787.html,后期再進行歸納)

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

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,898評論 18 399
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,280評論 0 62
  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向對象程序設計...
    子非魚_t_閱讀 4,667評論 1 44
  • 生活里,愿你我之間的情誼長長久久。 一天,一位sir打電話讓取回我和鋼蛋的東西。鋼蛋是我的朋友,他說,...
    安妮Ane閱讀 401評論 0 0
  • 曾經(jīng)相愛的地方 如今變得如此凄涼 樹上那對見證我們愛情的小鳥 已經(jīng)不知道了去向 只剩下空怯鳥巢與天空對望 風吹走了...
    風輕云淡_0861閱讀 480評論 4 10

友情鏈接更多精彩內容