1. 程式人生 > >override 和 overload 的區別

override 和 overload 的區別

一、定義:

override :覆蓋,用於繼承類對基類中虛成員的實現。使用 override 修飾符來修改方法、屬性、索引器或事件。覆蓋方法提供從基類繼承的成員的新實現。由覆蓋宣告覆蓋的方法稱為覆蓋基方法。覆蓋基方法必須與覆蓋方法具有相同的簽名。

overload 過載,用於同一個類中同名方法不同引數的實現。(包括型別不同或個數不同)當類包含兩個名稱相同但簽名不同的方法時發生方法過載。

二、使用方式:

override:

父類:public virtual string ToString(){return "a";}

子類:public override string ToString(){return "b";}

overload: 同一類中即可

public string ToString(){return "a";}

public string ToString(int id){return id.ToString();}

三、特點:

override

1. 用於派生類中,覆蓋基類中的虛方法和抽象方法,這樣在派生類中提供一個新的方法。

2. 覆蓋的方法名、方法引數、返回型別必須要和被覆蓋的方法完全匹配。

3. 覆蓋時不能縮小訪問許可權。

4. 被覆蓋的方法不能為private。

5. 覆蓋方法丟擲異常不能比父類方法多。

6. 覆蓋方法允許訪問的範圍不能小於原方法。

7. 重寫屬性宣告必須是與繼承屬性完全相同的訪問修飾符、型別和名稱

8. 被重寫的屬性必須是 virtual、abstract 或 override 的。(因為基類中的 override 實際上是對基類的基類進行的重寫,由於繼承可傳遞,所以也可以對基類中 override 的方法進行重寫。)

9. 不能重寫非虛方法或靜態方法。即被重寫的方法屬性必須是virtual、abstract或override的。

10. override 宣告不能更改 virtual 方法的可訪問性。即override 方法和 virtual 方法必須具有相同的訪問級別修飾符。 

11. 不能使用修飾符 new、static、virtual 或 abstract 修飾override 方法。

overload

1. 提供了一種機制, 相同函式名通過不同的引數來表來區分的機制

2. 在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數型別順序

3. 不能通過訪問許可權、返回型別、丟擲的異常進行過載

4. 方法的異常型別和數目不會對過載造成影響

5. 如果某一方法在父類中是訪問許可權是private,那麼就不能在子類對其進行過載,如果定義的話,也只是定義了一個新方法,而不會達到過載的效果

6. 對方法引數使用一致的排序和命名模式。提供一組過載方法,這組過載方法帶有遞增數目的引數,以使開發人員可以指定想要的級別的資訊,這種情況很常見。您指定的引數越多,開發人員就可指定得越詳細。

7. objective-C中沒有過載

四、例項:

//override:

class A

{

public virtual string ToString()

{

return "a";

}

}

class B : A

{

public override string ToString()

{

return "b";

}

}

//overload:

class C

{

public void A(int i) { Console.WriteLine(i);}

public void A(char i) { Console.WriteLine(i);}

public void A(int i,char j) { Console.WriteLine(i+j);}

public void A(char i,char j){ Console.WriteLine(i+j);}

}

五、區別:

override

overload

名稱

覆蓋

過載

使用方式

子類中覆蓋父類

同一類中或父類子類中

相同點

都要求方法同名

都可以用於抽象方法和非抽象方法之間

父類中許可權是private的,在子類中無法覆蓋或過載

區別

引數必須完全相同

(型別,個數)

引數必須不同(型別,個數)

子類中覆蓋父類

同一類中或父類子類中

返回引數必須相同

返回引數可能不同

一個類中只能覆蓋一次

virtual型別可以覆蓋

abstract型別必須覆蓋

可以過載多次

父類中方法屬性必須為virtual,abstract或override的

若方法為abstract型別,則其所屬類也必須為abstract型別

如果某一方法在父類中是訪問許可權是priavte,那麼就不能在子類對其進行過載,如果定義的話,也只是定義了一個新方法,而不會達到過載的效果

丟擲的異常必須和被覆蓋方法的所丟擲的異常一致,或者是其子類

方法的異常型別和數目不會對過載造成影響

返回型別必須相同

不能通過返回型別進行過載,但過載的返回型別可以不同

覆蓋時不能縮小訪問許可權。

覆蓋方法丟擲異常不能比父類方法多

覆蓋方法允許訪問的範圍不能小於原方法

不能通過訪問許可權、丟擲的異常進行過載

相關推薦

JAVA面試筆試:Override Overload區別

1、綜述  Override:重寫; Overload:過載。 這兩者之間的區別在很多Java的面試筆試中都會經常被問到,下面我就捋一下他們的區別。 重寫(Override)也稱覆蓋,它是父類與子類之間多型性的一種表現,而過載(Overload)是一個類中多型性的一種

OverrideOverload的含義去區別

最近看了一下關於java的基礎知識,對此作了一下蒐集整理:  java中的繼承,方法覆蓋(重寫)override與方法的過載overload的區別  方法的重寫(Overriding)和過載(Overloading)是Java多型性的不同表現。    重寫(Overrid

override overload區別

一、定義:override :覆蓋,用於繼承類對基類中虛成員的實現。使用 override 修飾符來修改方法、屬性、索引器或事件。覆蓋方法提供從基類繼承的成員的新實現。由覆蓋宣告覆蓋的方法稱為覆蓋基方法。覆蓋基方法必須與覆蓋方法具有相同的簽名。overload :過載,用於同

c++中 override overLoad區別

override(重寫,覆蓋)  1、方法名、引數、返回值相同。  2、子類方法不能縮小父類方法的訪問許可權。  3、子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。  4、存在於父類和子類之間。  5、方法被定義為final不能被重寫。  overload(過載,過載)  1、引數型別、

10. OverrideOverload的含義與區別

Override(重寫,執行時多型): 是子類對容許訪問父類的方法進行新的編寫的稱呼。其中方法名和形參不能發生改變;即外殼不變,內容可以發生改變。 優點:子類可以根據實際需要,定義特定於自己的行為。也就是說子類能夠實際根據需要實現父類的方法。

簡述overrideoverload區別

在文件中經常遇到這兩個單詞,但是意思經常混淆。首先我們看一下這兩個單詞的含義: override(重寫,覆蓋) (1)方法名、引數、返回值相同。 (2)子類方法不能縮小父類方法的訪問許可權。 (3)子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。 (4)存

OverrideOverload的含義與區別

java中的繼承,方法覆蓋(重寫)override與方法的過載overload的區別 方法的重寫(Overriding)和過載(Overloading)是Java多型性的不同表現。   重寫(Overriding)是父類與子類之間多型性的一種表現,而過載(Overloadi

overrideoverload的小筆記

override是覆蓋的意思,也就是我們的重寫。可以重寫覆蓋父類的方法,然後實現介面的方法也可以叫做override。 幾個要注意的點: 重寫一定要用和被重寫方法同樣的方法名還有引數列表。 丟擲的異常必須y要小於或者等於父類的 訪問許可權要大於等於父類的 !!返回值可以不同,但一定要是引

測者的測試技術手冊:分清Java的OverrideOverload

Java的Override和OverloadOverride重寫:子類對父類的允許訪問的方法實現過程重新編寫,但是 不可改變返回值和入參。重弄寫的規則: 引數列表必須完全與被重寫方法的相同; 返回型別必須完全與被重寫方法的返回型別相同; 訪問許可權不能比父類中被重寫的方法的訪問許可權更低。例如

Java 中的 override overload 運算,看這一篇就夠

問題出現: 即使對於一個經驗豐富的開發人員來說,方法過載和方法覆蓋的區別都能讓他猶豫一下, 對於新手來說,經常容易弄混淆。 有沒有比較深入淺出的理解方式,能讓人過目不忘,用起來還能有條件反射般的速度呢? 其他人是怎麼做的: 寫類似比較的部落格非常之多,無非也就是分開介紹,然後比較區別

Java 中的 override overload,看這一篇就夠

urn 兼容性 return com 容易 定義 erl ext class 問題出現: 即使對於一個經驗豐富的開發人員來說,方法重載和方法覆蓋的區別都能讓他猶豫一下, 對於新手來說,經常容易弄混淆。 有沒有比較深入淺出的理解方式,能讓人過目不忘,用起來還能有條件反射般的

Delphi中overrideoverload的定義區別是什麼?

overload是過載;相同的函式名,引數不同,使用不同的函式體   override   是對父類宣告的vitural或dynamic方法進行覆蓋 overload的使用方法:   function max(a, b :Byte):byte;overload;

Override(重寫)Overload(重載)的區別

bsp 重寫 基礎 異常 子類 的區別 名稱 多態 load Override是發生在子類繼承父類的基礎上才會有的,子類重寫父類的方法,方法名,參數個數,和參數名稱,返回值都要是一樣的。重寫是覆蓋了父類的方法。子類 覆蓋父類方法時只能拋出父類的異常或者是異常的子類或者父類異

過載(Overload重寫(Override)的區別。過載的方法能否根據返回型別進行區分?

方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回型別,比父類被重

過載(Overload重寫(Override)的區別

面試時,問:過載(Overload)和重寫(Override)的區別? 答:方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生

c++ const在過載overload覆蓋override上使用區別

1.overload 過載 首先講講const在過載上的使用,過載的目的是為了根據不同的輸入來呼叫不同的同名函式。const的位置不同會引起不同的效果,我在一篇轉載文章中具體闡述過:點選開啟連結 再歸納一下,能否構成過載的區別在於使用者能否知曉函式的不同: 1)放在函式尾部

Java中過載(overload重寫(override)的區別

概念 方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。 過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同

C#物件的三個特點:封裝,繼承,多型, 以及c#中隱藏(new)方法重寫(override)過載(overload)的區別

封裝 1)封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問,通常有兩種訪問方式:set 設定,get 獲取。 2)封裝結果:存在但是不可見。 3) 訪問修飾符 宣告的可訪問性                                

overridenew的區別

執行c 重新 bstr 方法 重寫 col rac abstract 派生 override 1. override是派生類用來重寫基類中方法的; 2. override不能重寫非虛方法和靜態方法; 3. override只能重寫用virtual、abs

方法的重寫與重載的區別OverrideOverload)。重載的方法是否可以改變返回值的類型

改變 父類 div 之間 如果 如同 java 調用 ava 方法的重寫(Override)與重載(Overload)的區別。重載的方法是否可以改變返回值的類型?【基礎】 解釋: 方法的重寫overriding和重載Overloading是Java多態性的不同表現。 1、重