【中低階級】-[物件導向]-介面(Interface)、抽象(abstract)與虛擬(virtual)的宣告

更新於 發佈於 閱讀時間約 7 分鐘

  物件導向說到這邊其實修飾詞不只有之前所提的public、private這些,還有可能遇到抽象(abstract)、虛擬(virtual)、覆寫(override)、隱藏(new)、密封(sealed)、介面(interface)等等,我們就來看一下它們的差異吧~


一、抽象(abstract)

  它是一個抽象化的概念,只做定義用途但是不能用來建立物件或是去定義怎麼處理方法的(例如:只知道有「說話」但不知道要怎麼說),若遇到abstract的宣告就必須要覆寫該方法,當你想要使用abstract來宣告方法的話,那麼此class前面就要多加abstract。

程式碼用法:

abstract  class 父類別:

  abstract public string Action();


class  子類別:父類別

  public override string Action()
  {
    敘述;
  }


二、虛擬(virtual)

  它是一個虛擬的方法,所以不能有abstract、static、override的修飾詞,並且也不能為私人的,因此也就不能使用private這個修飾詞。

  由於是一個虛擬的方法因此是可以去定義怎麼處理的方法(例如:知道有「說話」並且會說「做得非常好!」),並且它也可被修改基底的方法。也就是遇到virtual的宣告就代表可以被覆寫該方法,(例如:將「做得非常好!」修改成「辛苦了!這邊你覺得還可以怎麼做會更好呢?」,那麼最後就會呈現依後者所做的修改結果為主),簡言之就是可以被覆蓋原來的做法內容

程式碼:

class 父類別:

  public virtual void food()
  {
    敘述;
  }


class 子類別:父類別
{
  public override void food()
  {
    敘述;
  }
}


三、覆寫(override)

  就是去更改父類別原有的方法或內容,也就是說遇到抽象(abstract)的宣告那麼子類別就一定會出現覆寫(override)的方法,或是看到虛擬(virtual)想要更改執行內容,也就會在子類別中出現覆寫(override)。

  想要做override,父類別就必須要有virtual或abstract相關的宣告才可以使用它,並且名稱要跟父類別的方法名稱一樣才行!

程式碼:(例子可以看上面抽象、虛擬的例子,用在於子類別中)


四、隱藏(new)

  大家看到new看起來應該不陌生,通常在建立物件、呼叫建構函式會用到它。但是!!這邊我要說的是「隱藏」用途,可能就會比較陌生一點點吧!(我自己對它是很陌生的,所以去了解了一下)

  對於父類別成員隱藏繼承的成員,看不懂!若遇到子類別想要修改父類別的內容值的話,就要使用override,但是發現父類別沒有使用抽象(abstract)、虛擬(virtual)這樣的方法,那怎麼辦?此時就可以使用new這個修飾詞了!

  如果只是少數或其一要修改內容的話,那麼為何不直接在父類別加入virtual這個修飾詞呢?是因為為了增加擴充的彈性,程式未來的變化修改狀況可能會很多,同一支程式會一直優化優化再優化,所以也就有了這個修飾詞方便我們做擴充。

Note:我有看到網路上有人解釋得更仔細
1.C# - new和override的差異與目的


五、密封(sealed)

  這是一個防止被繼承(也就是不能當爸爸)或防止被覆寫,看是用在類別還是屬性、方法,也就是相對應的不可被繼承與覆寫,但是呢!想要密封(sealed)就必須跟著覆寫(override)才能使用

程式碼1:

sealed  class  A
{
  敘述;
}

class  B:A
{
  //不能將A當作爸爸,因為A前面有sealed
}

程式碼2:

class  A
{
  virtual private void talk()
  {
    敘述;
  }
}

class  B:A
{
  sealed private override void talk()
  {
    敘述;
  }
}

class  C:B
{
  private override void talk()
  {
    //不能使用talk這個方法了,因為C是繼承B,然而Class B的talk方法前面已經有了(密封)sealed,因此在Class C中不可更改內容。
  }
}


六、介面(interface)

1.什麼是「介面(interface)」?


  interface只敘述有哪些欄位屬性和行為方法,並不會去做怎麼執行的ㄛ!

  舉例來說:人會說話、玩遊戲,那麼「人」就是介面的命名,「說話」、「玩遊戲」就是介面裡的內容,至於說什麼話,玩什麼遊戲,在介面中是不會去做的事,而是類別中有去繼承此介面才會去做的事。

  那麼類別若繼承了「人」這個介面,那麼此介面中的「說話」、「玩遊戲」都需要去實作,也就是都要讓它們實際的做事情才可以。

*通常使用interface時,它的命名方式都以「I」開頭為主
*類別可以繼承多個介面,介面與介面中用「,」隔開
*類別使用介面時,介面當中的內容都必須要實際做事情才可以,不可有落單情形發生
*類別使用介面中的內容時,必須為Public

來看實際例子

raw-image
raw-image
raw-image
raw-image
raw-image

這邊ClassStudent類別繼承了兩個介面分別為IPeople、IIdentity,那麼ClassStudent類別的內容就必須包含IPeople、IIdentity介面裡的所有內容並且實作它才可以。

由於介面的內容都屬於Public,因此主程式可以直接使用類別中所繼承介面的相關內容。


  到目前為止是對於抽象(abstract)、虛擬(virtual)、覆寫(override)、隱藏(new)、密封(sealed)、介面(interface)的用法以及前面五個他們之間的關係介紹。

這邊對於我來說是必須要動手操作好幾次才可以了解它們的用法,所以如果用看的不了解,不妨也動手操作試試看吧!有做才能有收穫哦!

參考資料:
1.[C#] 物件導向三大特性
2.C#雜記 — 介面(interface)、抽象( abstract)、虛擬(virtual)之我見
3.[C#] 區分 abstract、virtual、override 和 new
4.Day25 | 善用 interface 抽象概念,為 Class 找到出路
5.sealed (C# 參考)
6.DAY 13 介面


留言
avatar-img
留言分享你的想法!
avatar-img
橙果杏的沙龍
25會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
橙果杏的沙龍的其他內容
2024/07/30
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
2024/07/30
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
Thumbnail
2024/06/29
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
2024/06/29
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
Thumbnail
2024/06/20
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
2024/06/20
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
這篇文章將會講述 Unity C# 中關於 Interface (介面/接口)的基本介紹以及原理說明,最後提供完整的使用流程。
Thumbnail
這篇文章將會講述 Unity C# 中關於 Interface (介面/接口)的基本介紹以及原理說明,最後提供完整的使用流程。
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
,先來分享一下封裝是怎麼一回事。 一、封裝(Encapsulation) 封裝就是把一些功能的處理程序或是資料包起來,也對於程式碼做權限的設定做一層保護的機制,這是為了防止程式碼被竄改,所以有了封裝可以保障我們資料的隱密性,甚至封裝也是一種將一些處理程序隱藏起來,讓使用者使用時可以更加單純。 1.什
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
一、存取修飾詞public / private / protected / internal 二、參數修飾詞ref / in / out >>>>>由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
介紹 在程式中你看到上面有一個中括號[] 就是特性,它自身沒有任何功能。 📷 特性attribute,和注釋有什麼區別 第一個感受 特性:中括號宣告 錯覺:每一個特性都可以帶來對應的功能 實際上添加後,編譯器會在元素內部產生IL,但是我們是沒辦法直接使用的,而且在metadata會有紀錄 📷
Thumbnail
介紹 在程式中你看到上面有一個中括號[] 就是特性,它自身沒有任何功能。 📷 特性attribute,和注釋有什麼區別 第一個感受 特性:中括號宣告 錯覺:每一個特性都可以帶來對應的功能 實際上添加後,編譯器會在元素內部產生IL,但是我們是沒辦法直接使用的,而且在metadata會有紀錄 📷
Thumbnail
abstract class = 抽象類別 interface = 介面 抽象類別與介面都無法建立物件。 1. 使用abstract關鍵字來建立抽象類別,interface關鍵字建立介面。 interface只能繼承interface,且可以繼承多個:
Thumbnail
abstract class = 抽象類別 interface = 介面 抽象類別與介面都無法建立物件。 1. 使用abstract關鍵字來建立抽象類別,interface關鍵字建立介面。 interface只能繼承interface,且可以繼承多個:
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
本篇文章將會介紹C#的基礎構成和字串的使用,若想要更詳細的教學,可以參考前一篇文章,前往Microsoft官方教學學習。
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News