基于多態(tài)之虛方法、抽象類、接口詳解
虛方法:
1、在父類方法的返回值前加 virtual 關(guān)鍵字,標(biāo)記為虛方法,表示這個(gè)方法可以被子類重寫。
2、虛方法必須有方法體,方法體中可以沒(méi)有任何內(nèi)容。
3、子類可以根據(jù)需求選擇性的是否重寫虛方法。如果需要重寫,在子類方法的返回值前加 override 關(guān)鍵字。
4、子類在重寫虛方法時(shí),可以根據(jù)需求選擇性的是否使用 base 關(guān)鍵字調(diào)用父類中的該方法。
虛方法語(yǔ)法格式如下:
public class Father
{
public virtual void Do()
{
//.....
}
}
public class Son : Father
{
public override void Do()
{
base.Do();//選擇性的是否調(diào)用。
//....代碼體
}
}
抽象類:
1、在定義類的關(guān)鍵字 class 前面加 abstract 修飾,表示這個(gè)類為抽象類。子類繼承抽象類后,使用 override 關(guān)鍵字重寫父類中的所有抽象方法。
2、抽象類中不一定有抽象方法,但是抽象方法必須存在于抽象類中。抽象方法也需要用 abstract 關(guān)鍵字進(jìn)行修飾。
3、抽象方法沒(méi)有方法體,且抽象方法必須在子類中實(shí)現(xiàn)。
4、抽象類不能被實(shí)例化,但是可以有構(gòu)造函數(shù)。因?yàn)槌橄箢愔杏谐橄蠓椒ǎo(wú)方法體),如果實(shí)例化抽象類,那么抽象類的對(duì)象調(diào)用這些無(wú)方法體的抽象方法是沒(méi)有任何意義的,所以無(wú)法實(shí)例化。
抽象類以及抽象方法語(yǔ)法格式如下:
public abstract class Father//抽象類
{
public abstract void Do();//抽象方法
}
public class Son : Father
{
public override void Do()
{
//...
}
}
接口:當(dāng)抽象類中的所有方法都是抽象方法時(shí),可以用接口的形式來(lái)表現(xiàn)。
1、接口使用 interface 關(guān)鍵字定義,沒(méi)有 class 關(guān)鍵字,接口名一般使用“IXxxx”。
2、接口中不能包含字段,但是可以包含屬性(自動(dòng)屬性)。
3、接口中定義的方法不能有方法體,全是抽象方法,但又不需要用 abstract 關(guān)鍵字修飾,因此接口不能被實(shí)例化,且不能有構(gòu)造函數(shù)。
4、接口中的成員不允許添加訪問(wèn)修飾符,默認(rèn)都是 public。
5、一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,被實(shí)現(xiàn)的接口之間用逗號(hào)分隔開(kāi);一個(gè)接口也可以繼承多個(gè)接口,接口之間也要用逗號(hào)分隔;當(dāng)一個(gè)接口實(shí)現(xiàn)一個(gè)接口時(shí),如果這兩個(gè)接口中有相同的方法時(shí),可以用 new 關(guān)鍵字隱藏父接口中的方法。
6、繼承者必須實(shí)現(xiàn)接口中的所有方法。
接口語(yǔ)法格式如下:
interface IFather
{
void Do();
}
interface IMother:IFather
{
new void Do();//隱藏父接口的同名方法
void Do1();
}
public class Son : IFather,IMother
{
public void Do()
{
//......
}
public void Do1()
{
//.....
}
}
以上這篇基于多態(tài)之虛方法、抽象類、接口詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#反射之基礎(chǔ)應(yīng)用實(shí)例總結(jié)
這篇文章主要介紹了C#反射之基礎(chǔ)應(yīng)用實(shí)例總結(jié),包括了反射的基本原理與用法實(shí)例,需要的朋友可以參考下2014-10-10
C# 以MDF文件鏈接數(shù)據(jù)庫(kù)的示例代碼
本篇文章主要介紹了C# 以MDF文件鏈接數(shù)據(jù)庫(kù)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布
在消息隊(duì)列模型中,如何將消息廣播到所有的消費(fèi)者,這種模式成為“發(fā)布/訂閱”。本文主要以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述通過(guò)fanout交換機(jī),實(shí)現(xiàn)消息的發(fā)布與訂閱,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。2021-05-05
如何:對(duì)Windows 窗體控件進(jìn)行線程安全調(diào)用
使用多線程提高 Windows 窗體應(yīng)用程序的性能時(shí),必須注意以線程安全方式調(diào)用控件。2007-03-03
C#實(shí)現(xiàn)給定字符串生成MD5哈希的方法
這篇文章主要介紹了C#實(shí)現(xiàn)給定字符串生成MD5哈希的方法,涉及C#操作字符串的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C#的FileInfo類實(shí)現(xiàn)文件操作實(shí)例
這篇文章主要介紹了C#的FileInfo類實(shí)現(xiàn)文件操作實(shí)例,比較實(shí)用的功能,需要的朋友可以參考下2014-07-07
C#如何在WinForm中打開(kāi)Excel文件,或打開(kāi)Excel應(yīng)用顯示數(shù)據(jù)
這篇文章詳細(xì)介紹了如何在WinForm中打開(kāi)Excel文件,并提供了相關(guān)的代碼解釋、數(shù)據(jù)插入、單元格格式設(shè)置和頁(yè)面格式設(shè)置的方法2024-12-12

