C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解
過載(過載)overload、重寫(覆蓋)override、覆寫overwrite(new)詳解
一、override重寫,是在子類中重寫父類中的方法,兩個函式的函式特徵(函式名、引數型別與個數)相同。用於擴充套件或修改繼承的方法、屬性、索引器或事件的抽象或虛擬實現。提供從基類繼承的成員的新實現,而通過override宣告重寫的方法稱為基方法。
注意事項:
1.重寫基方法必須具有與override方法相同的簽名。
2.override宣告不能更改virtual方法的可訪問性,且override方法與virtual方法必須具有相同級別訪問修飾符。
3.不能用new、static、virtual修飾符修改override方法。
4.重寫屬性宣告必須指定與繼承的屬性完全相同的訪問修飾符、型別和名稱。
5.重寫的屬性必須是virtual、abstract或override。
6.不能重寫非虛方法或靜態方法。
7.父類中有abstract,那麼子類同名方法必定有override,若父類中有 virtual方法,子類同名方法不一定是override,可能是overload。
8.override必定有父子類關係。
二、overload過載,在同一個類中方法名相同、引數或返回值不同的多個方法即為方法過載。
注意事項:
1.出現在同一個類中。
2.引數列表不同或返回型別和引數列表都不同,只有返回型別不同不能過載。(引數列表包括引數個數和引數型別)
三、overwrite覆寫,用new實現。在子類中用 new 關鍵字修飾定義的與父類中同名的方法,也稱為覆蓋,覆蓋不會改變父類方法的功能。
另一種解釋new是指“隱藏”,是指子類隱藏了父類的方法,當然,通過一定的轉換,可以在子類的物件中訪問父類的方法。
示例:
class Parent
{
public void F()
{
Console.WriteLine("Parent.F()");
}
public virtual void G() //抽象方法
{
Console.WriteLine("Parent.G()");
}
public int Add(int x, int y)
{
return x + y;
}
public float Add(float x, float y) //過載(overload)Add函式
{
return x + y;
}
}
class ChildOne:Parent //子類一繼承父類
{
new public void F() //重寫(overwrite)父類函式
{
Console.WriteLine("ChildOne.F()");
}
public override void G() //覆寫(override)父類虛擬函式,主要實現多型
{
Console.WriteLine("ChildOne.G()");
}
}
class ChildTwo:Parent //子類二繼承父類
{
new public void F()
{
Console.WriteLine("ChildTwo.F()");
}
public override void G()
{
Console.WriteLine("ChildTwo.G()");
}
}
class Program
{
static void Main(string[] args)
{
Parent childOne = new ChildOne();
Parent childTwo = new ChildTwo();
//呼叫Parent.F()
childOne.F();
childTwo.F();
//實現多型
childOne.G();
childTwo.G();
Parent load = new Parent();
//過載(overload)
Console.WriteLine(load.Add(1, 2));
Console.WriteLine(load.Add(3.4f, 4.5f));
Console.Read();
}
}
---------------------
作者:入秋楓葉
來源:CSDN
原文:https://blog.csdn.net/yiyelanxin/article/details/71711383
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關文章
- override(重寫) and overload(過載)IDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 方法重寫(Override)IDE
- 子類重寫父類的方法@Override的快捷鍵IDE
- c# yield關鍵字原理詳解C#
- js中new關鍵字的使用過程JS
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- 關於繼承、重寫、過載的易混淆之處的總結繼承
- 過載和重寫的區別
- Java中的過載和重寫Java
- c#關鍵字C#
- 重寫返回鍵(Fragment)Fragment
- Java—重寫與過載的區別Java
- Java中方法重寫與方法過載Java
- Nginx URL重寫規則配置詳解Nginx
- C++ typeid關鍵字詳解C++
- 手寫new
- 萬字乾貨|Synchronized關鍵字詳解synchronized
- c#重寫和多型C#多型
- Python中有重寫和過載的方法嗎?Python
- 重寫JS中的apply,call,bind,new方法JSAPP
- C++中過載、重寫、重定義的區別C++
- 手寫js new,new的過程到底發生了什麼JS
- 我們又重寫了一個關鍵服務
- C語言中static關鍵字詳解C語言
- c#—OpenFileDialog(開啟檔案對話方塊)和new關鍵字的用法C#
- 帶你輕鬆瞭解C# Lock 關鍵字C#
- js實現重寫new Date()相容IE6以上JS
- 一句話說明白C#中的new與override的區別C#IDE
- JavaScript手寫new方法JavaScript
- Java 中的 override 和 overload,看這一篇就夠JavaIDE
- 萬字詳解資料安全關鍵技術之資料脫敏
- 從jvm角度看懂類初始化、方法過載、重寫。JVM
- 從jvm角度看懂類初始化、方法重寫、過載。JVM