【c#】重寫和過載
初次看到這兩個名詞,感覺它們兩個有著千絲萬縷的聯絡似的,不過仔細一研究,發現它們的差異還是很大的。
通俗點說,重寫就是改頭換面,重新做人;過載就是給它加了個兄弟。
下面對比介紹一下重寫和過載。
重寫的規則:
1.在不同類中(有繼承關係的類之間,一般用於派生類)。
2. 重寫與被重寫方法的相同點:引數列表、返回值、丟擲異常,方法名 。
3.重寫與被重寫方法的不同點:重寫方法的訪問修飾符>被重寫的訪問修飾符(public>package>protected>private); 方法體不同。
4.重寫的基方法必須是virtual、abstract或override,不能重寫非虛方法或靜態方法。
override和new區別:
new宣告的方法,子類呼叫,執行子類的函式,而如果型別是基類,被隱藏的基類函式就會被呼叫。
子類函式使用override,用子類的型別來呼叫,會執行子類的函式,類是基類的時候,仍會呼叫子類的函式。
舉例:
(源自C#過載和重寫的區別)
public abstract class BaseClass//定義一個抽象的虛類
{
public abstract void ShowInfo();//定義虛方法
public virtual void OutInfo()//定義抽象方法
{
Console.WriteLine("這是基類的虛方法!");
}
}
public class SonClass : BaseClass//實現抽象基類BaseClass
{
public override void ShowInfo()//重寫基類的抽象方法
{
Console.WriteLine("重寫基類的抽象方法");
}
public override void OutInfo()//重寫基類的虛方法
{
Console.WriteLine("重寫基類的虛方法");
}
}
過載的規則:
1.在同一個類中
2.方法名必須相同
3.引數列表不能相同,返回值可以相同可以不同
4.任何一個父類的函式在其一個子類中只能被重寫一次。
舉例:
class BillPayment
{
void PayBill(int telephoneNumber)
{
//此方法用於支付固定電話費
}
void PayBill(long consumerNumber)
{
//此方法用於支付電費
}
void PayBill(long consumerNumber, double amount)
{
//此方法用於支付行動電話話費
}
}
感受:
貌似相同,就要找不同點,為了留下深刻的印象;貌似不同,就要找相同點,減少知識量。生活就是學習,學習來源於生活。對學習的知識有一個感性的認識,感性的認識很容易讓人接受,銘記,然後通過實踐去理解理論,進行總結,最後創新是我們的終極目標。
PS:2015年8月17日
為什麼用重寫:
子類可以對父類的方法進行重寫,讓自己擁有父類的屬性,方法更加的靈活,實現了多型。
為什麼用過載:
方法過載可以再不改變原來方法的基礎上,新增功能。提供了函式可擴充套件的能力。
重寫和過載對比:
作用域:重寫(父類與子類),過載(方法之間)
特點:重寫(方法名相同) ,過載(方法名相同,引數不同)
相關文章
- 過載和重寫的區別
- Java中的過載和重寫Java
- Python中有重寫和過載的方法嗎?Python
- c#重寫和多型C#多型
- override(重寫) and overload(過載)IDE
- C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解C#IDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- Java—重寫與過載的區別Java
- Java中方法重寫與方法過載Java
- 面試官:Java的重寫和過載有什麼區別?面試Java
- C++中過載、重寫、重定義的區別C++
- 淺談C#中重寫和隱藏的區別C#
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 從jvm角度看懂類初始化、方法過載、重寫。JVM
- 從jvm角度看懂類初始化、方法重寫、過載。JVM
- 簡單談談方法過載和方法重寫(編譯時多型和執行時多型)編譯多型
- AI回答記錄:python中有過載與重寫的概念嗎?AIPython
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- 瞭解下C# 運算子過載C#
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- java~重寫hashcode和equalsJava
- 透過C#重啟iis網站服務C#網站
- java程式設計——從jvm角度看懂類初始化、方法重寫、過載Java程式設計JVM
- 道重山寫幾滿話自過度重感性GZQC
- HashSet中重寫haseCode和equals
- 透過 C# 將資料寫入到Excel表格C#Excel
- 方法重置和重寫的區別
- PHP實現url重寫和.htaccessPHP
- 重學c#系列——c# 託管和非託管資源(三)C#
- C#運算子過載---逐步地分析與理解C#
- 重學c#系列——datetime 和 datetimeoffset[二十一]C#
- C++ 過載運算子和過載函式C++函式
- 過載和內聯
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- 關於重寫equals()和hashCode()的思考
- 重學c#————structC#Struct
- 重寫equals方法以及重寫tostring方法