天天看點

Java中方法重寫和重載的差別

一、方法的重載

— 重載(overloading) 是在一個類裡面,方法名字相同,而參數不同。傳回類型可以相同也可以不同。每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型清單。

重載的規則:

(1)方法名字相同

(2)被重載的方法必須形參清單不一樣(參數個數或類型不一樣);

(3)被重載的方法可以改變傳回類型;

(4)被重載的方法可以改變通路修飾符;

(5)傳回值類型不能作為重載函數的區分标準。

(6)被重載的方法可以聲明新的或更廣的檢查異常;

(7)方法能夠在同一個類中或者在一個子類中被重載。

二、方法重寫

—重寫是子類對父類的允許通路的方法的實作過程進行重新編寫, 傳回值和形參都不能改變。

— 重寫的好處在于子類可以根據需要,定義特定于自己的行為。 也就是說子類能夠根據需要實作父類的方法。

— 重寫方法不能抛出新的檢查異常或者比被重寫方法申明更加寬泛的異常。(例如:父類的一個方法申明了一個檢查異常 IOException,但是在重寫這個方法的時候不能抛出 Exception 異常,因為 Exception 是IOException 的父類,隻能抛出 IOException 的子類異常)

重寫的規則:

(1)參數清單必須完全與被重寫方法的相同;

(2)傳回類型必須完全與被重寫方法的傳回類型相同;

(3)通路權限不能比父類中被重寫的方法的通路權限更低。(例如:如果父類的一個方法被聲明為public,那麼在子類中重寫該方法就不能聲明為protected)

(4)父類的成員隻能被它的子類重寫;

(5)聲明為final的方法不能被重寫;

(6)聲明為static的方法不能被重寫,但是能夠被再次聲明;

(7)子類和父類在同一個包中,那麼子類可以重寫父類所有出了聲明為private和final的方法;

(8)子類和父類不在同一個包中,那麼子類隻能夠重寫父類的聲明為public和protected的非final方法;

(9)重寫的方法能夠抛出任何非強制異常,無論被重寫的方法是否抛出異常。但是,重寫的方法不能抛出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。

(10)構造方法不能被重寫;

(11)如果不能繼承一個方法,則不能重寫這個方法;

三、重寫與重載之間的差別

— 方法重載是一個類中定義了多個方法名相同,而他們的參數的數量不同或數量相同而類型和次序不同,則稱為方法的重載(Overloading);

— 方法重寫是在子類存在方法與父類的方法的名字相同,而且參數的個數與類型一樣,傳回值也一樣的方法,就稱為重寫(Overriding)。

— 方法重載是一個類的多态性表現,而方法重寫是子類與父類的一種多态性表現。

【額外】

1、super與this關鍵字

— super關鍵字(我們可以通過super關鍵字來實作對父類成員的通路,用引用目前對象的父類)

2、final修飾符

— final主要用法有四種:

(1)用來修飾資料,包括成員變量和局部變量,該變量隻能被指派一次且它的值無法被改變。對于成員變量來講,我們必須在聲明時、構造方法或者初始化塊中對它指派;

(2) 用來修飾局部變量,表示在變量的生存期中它的值不能被改變;、

(3)修飾方法,表示該方法無法被重寫;

(4)修飾類,表示該類無法被繼承。