程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 之 抽象類與接口

C# 之 抽象類與接口

編輯:C#入門知識

抽象類

C#允許把類和方法聲明為abstract,即抽象類和抽象方法。抽象類通常代表一個抽象概念,它提供一個繼承的出發點,當設計一個新的對象類時,一定是用來繼承的,所以,在一個以繼承關系形成的等級結構裡面,樹葉節點應當是具體類,而樹枝節點均應當是抽象類。抽象類擁有盡可能多的共同代碼,擁有盡可能少的數據。


注意:1.抽象類不能實例化;2.抽象方法是必須被子類重寫的方法;3.如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其他一般方法。
\



接口

接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合。一旦類實現了接口,類就可以支持接口所指定的所有屬性和成員。聲明接口在語法上與聲明抽象類完全相同,但不允許提供接口中任何成員的執行方式。所以接口不能實例化,不能有構造方法和字段;不能有修飾符,比如public、private等;不能聲明虛擬的或靜態的等。還有實現接口的類就必須要實現接口中的所有方法和屬性。<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4KPHN0cm9uZz4gICAgvdO/2tPDaW50ZXJmYWNlyfnD96Ostviyu8rHY2xhc3OjrL3Tv9rD+7PGx7DSqrzToa5J",接口中的方法或屬性前面不能有修飾符、方法沒有方法體。




抽象類與接口的區別:


類是對對象的抽象,抽象類是對類的抽象,接口是對行為的抽象。

如果行為跨越不同類的對象,可使用接口;對於一些相似的類對象,用繼承抽象類

從設計角度講,抽象類是從子類中發現公共的東西,泛化出父類,然後子類繼承父類,而接口是根本不知子類的存在,方法如何實現還不確認,預先定義。


抽象類和接口都包含可以由派生類繼承的成員。接口和抽象類都不能直接實例化,但可以聲明這些類型的變量。如果這樣做,就可以使用多態性把繼承這兩種類型的對象指定給他們的變量。接著通過這些變量來使用這些類型的成員,但不能直接訪問派生對象的其他成員。

派生類只能繼承一個基類,即只能夠直接繼承一個抽象類(但是可以用一個繼承鏈包含多個抽象類)。相反,類可以使用任意多個接口,但這不會產生太大的區別——這兩種情況取得的效果是類似的,只是采用接口的方式略有不同。

抽象類可以擁有抽象成員(沒有代碼體,且必須在派生類中實現,否則派生類本身必須也是抽象的)用非抽象成員(它們擁有代碼體,也可以是虛擬的,這樣就可以在派生類中重寫)。另一方面,接口成員必須都在使用接口的類上實現——它們沒有代碼體。另外,按照定義,接口成員是公共的(因為它們傾向於在外部使用),但抽象類的成員可以是私有的(只要它們不是抽象的)、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。此外,接口不能包含字段、構造函數、析構函數、靜態成員或常量。

抽象類主要用作對象系列的基類,共享某些主要特性,例如,共同的目的和結構。接口則主要用於類,這些類在基礎水平上有所不同,但仍可以完成某些相同的任務。

抽象類可以給出一些成員的實現,接口卻不包含成員的實現,抽象類的抽象成員可被子類部分實現,接口的成員需要實現類完全實現,一個類智能繼承一個抽象類,但可實現多個接口等等。











  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved