C#中的虛方法,抽象方法,抽象類以及接口


前言

眾所周知,面向對象三大特點:封裝、繼承、多態。而今天我們將要學習的都是以多態為基礎的,而什么是多態呢?舉個不恰當的例子,比如你的對象,今天面對你是一副姿態,明天她給你戴綠帽子又是另一副模樣(這個例子是從一個博主那看到的),你的對象還是同一個人,但是可以根據使用的對象來展現不一樣的面貌,這,就是多態。簡單來說:多態就是在繼承的前提下,不同對象調用相同方法卻表現出不同的行為。注:本次示例使用VS Code.

虛方法:virtual

虛方法存在於相對於需要實現多態的子類的父類當中,同時也是實現多態的最基本的方法。

具體語法:父類的方法,用virtual修飾,表示虛方法。繼承它的子類,在內部用override進行重寫。下面進行案例分析:

貓和狗都是動物,他們都會叫,但是叫聲不一樣。提取出相同的部分,即叫聲,將叫聲實現為多態。

新建父類:Animal,新建子類Cat、Dog,代碼如下:

 


 

 


 

 

 


調用小貓重寫的方法

調用小狗重寫的方法

 

抽象方法和抽象類

抽象方法和抽象類的關鍵字都是:abstract

如果父類的方法很抽象,而且沒有具體的do(做什么)即方法體,必須要子類進行重寫才有實際意義的話,這種情況就需要用抽象方法了。

父類、子類及輸出:

 


 

 


 

 


 

 

抽象方法,必須存在於抽象類當中。相反,抽象類中不一定全部是抽象方法。比如我們可以在里面寫上普通方法,有實現的虛方法或者沒有實現的虛方法都可以。前面我們講的虛方法,假如子類需要完成多態的表現,而父類的方法實際上也有實際意義,那父類可以選擇實現,等需要子類重寫的時候去重寫實現調用,父類的方法暫時沒有實際意義,也可以不用具體實現。所以,父類的虛方法可以實現(有方法體),也可以不實現(沒有方法體)。而抽象方法必須通過子類的重寫來實現。

抽象類可以被實例化,但不能通過普通的實例化new,它只能通過父類的應用指向子類的實例來間接的實例化子類。

注意:抽象方法沒有方法體,繼承了抽象類的子類,必須實現父類的所有的抽象方法。

抽象類使用場景:

1.父類方法不知道如何去使用

2.父類沒有默認實現,而且不需要實例化

總的來說:抽象方法和虛方法差不多,實現的功能都差不多。抽象方法必須要包含在抽象類當中,而抽象類中可以不全是抽象方法。抽象類保證了所有的抽象方法必須得到重寫,而虛方法可以根據需要來選擇是否進行重寫。

接口:Interface

接口和抽象類差不多,區別在於,接口內包含的全部是未實現的方法。而且接口類和方法的關鍵詞不需要再聲明abstract,接口類的關鍵詞,interface,一般定義接口名稱,按照約定,我們會在名稱前面加上一個I。例如下圖的打印機接口。

 


 

里面有兩個未實現的方法。下面定義一個惠普打印機實現類,繼承自接口IPrinter

 


 

輸出:


 

總結可以如下圖:

 


 
歡迎關注公眾號一起學習:dotNET學習天地


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM