C#中接口(Interface)與抽象類(abstract)的區別

前言:在我學習接口(interface)抽象類(abstract)時,我發現它們有一些相似之處也有一些不同,本博文來詳細說說它們二者之間的區別:

一.不同之處:

1.聲明上:

接口所採用的的是interface關鍵字進行聲明,抽象類用的是abstract關鍵字進行聲明;
怎麼感覺這句話像是廢話呢?😃😃(手動滑稽)

2.成員上:

1. 接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現,也可以定義非靜態的類變量.
2. 在抽象類中加入一個方法,那麼它的子類就同時有了這個方法。而在接口中加入新的方法,那麼實現它的類就要進行對這個方法的重寫;
3. 接口成員被定義爲公共的,但抽象類的成員也可以是私有的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問,也就相當於是私有的);
4. 接口中的方法全部爲抽象方法,但是抽象類中可以有抽象方法也可以有普通方法;

3.繼承上:

抽象類是類,大家都知道類是單繼承的,而接口不一樣可以一次性實現多個接口的繼承;(關於接口的這個多繼承在上一篇博文接口(interface)中已經詳細介紹了,有興趣的小夥伴可以去看看)

4.實現上:

在抽象類的方法實現時會用到關鍵字override,但是接口方法的實現時沒有這麼苛刻的前提

5.作用上:

抽象類主要用來抽象類別,接口主要用來抽象功能

二.相同之處:

1.抽象類主要用來抽象類別,接口主要用來抽象功能;
2.兩者都不可以實例化;
3.都能被繼承;
4.都可以包含方法聲明;
5.派生類必須實現未實現的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章