抽象類和介面在語法和設計原則上的區別
1.類是對物件的抽象,可以把抽象類理解為把類當作物件,抽象成的類叫做抽象類
介面只是乙個行為的規範或規定,微軟的自定義介面總是後帶able欄位,證明其是表述一類類「我能做。。。」抽象類更多的是定義在一系列緊密相關的類間,而介面大多數是關係疏鬆但都實現某一功能的類中
2.介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠呼叫的方法;
3.乙個類一次可以實現若干個介面,但是只能擴充套件乙個父類
4.介面可以用於支援**,而繼承並不具備這個特點.
5.抽象類不能被密封。
6.抽象類實現的具體方法預設為虛的,但實現介面的類中的介面方法卻預設為非 虛的,當然您也可以宣告為虛的。 (c#)
7.(介面)與非抽象類類似,抽象類也必須為在該類的基類列表中列出的介面的所有成員提供它自己的實現。但是,允許抽象類將介面方法對映到抽象方法上。
8抽象類實現了oop中的乙個原則,把可變的與不可變的分離。抽象類和介面就是定義為不可變的,而把可變的座位子類去實現。
9 好的介面定義應該是具有專一功能性的,而不是多功能的,否則造成介面汙染。如果乙個類只是實現了這個介面的中乙個功能,而不得不去實現介面中的其他方法,就叫介面汙染。
10 盡量避免使用繼承來實現組建功能,而是使用黑箱復用,即物件組合。因為繼承的層次增多,造成最直接的後果就是當你呼叫這個類群中某一類,就必須把他們全部載入到棧中!後果可想而知.(結合堆疊原理理解)。同時,有心的朋友可以留意到微軟在構建乙個類時,很多時候用到了物件組合的方法。比如asp.net中,page類,有server request等屬性,但其實他們都是某個類的物件。使用page類的這個物件來呼叫另外的類的方法和屬性,這個是非常基本的乙個設計原則。
11 如果抽象類實現介面,則可以把介面中方法對映到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面中方法
如果預計要建立元件的多個版本,則建立抽象類。抽象類提供簡單的方法來控制項版本。如果建立的功能將在大範圍的全異物件間使用,則使用介面。如果要設計小而簡練的功能塊,則使用介面。如果要設計大的功能單元,則使用抽象類。
如果要在元件的所有實現間提供通用的已實現功能,則使用抽象類。
設計原則與思想 介面和抽象類
08 理論五 介面vs抽象類的區別?如何用普通的類模擬抽象類和介面?抽象類和介面能解決什麼程式設計問題?抽象類不允許被例項化,只能被繼承,抽象類 復用,多型性的優雅實現 為什麼需要介面?它能夠解決什麼程式設計問題?介面 不允許例項化,只能被實現 不包含屬性和普通方法,包含抽象方法 靜態方法 defa...
抽象類和介面的語法區別
1.抽象類可以有構造方法,介面中不能有構造方法。2.抽象類中可以有普通成員變數,介面中沒有普通成員變數 3.抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。4.抽象類中的抽象方法的訪問型別可以是public,protected和 預設型別,雖然 eclips...
抽象類和介面的語法區別
下面來比較一下抽象類和介面的語法區別 個人認為它們的區別可以粗略的分為三點 1.繼承實現方面 乙個類可以實現多個介面,但只能繼承乙個抽象類 介面也可以繼承其他介面 2.成員變數方面 抽象類中可以有普通成員變數,介面中沒有普通成員變數 抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的 3...