接觸物件導向也有一段時間了,可是理解一直特別地淺。要用的時候才知道無從下手。最近又將物件導向相關的書籍看了看,一些概念比如:封裝、繼承和多型有了一些認識,但是還有一些就讓我焦頭爛額了,比如:委託。這裡我整理了一些關於抽象類和介面的知識,其中以乙個大家都非常熟悉的例子進行講解(動物)。
現實世界中貓和狗都叫做動物,我們可以實實在在地找到乙隻貓,也可以實實在在地找到乙隻狗。但是卻找不到乙個實體是對應於動物的。很簡單因為動物是乙個抽象的名詞。c#中把類和方法宣告為abstract,即抽象類和抽象方法。而vb.net中使用mustinherit和mustoverride修飾符。
c#:
abstract class animal
( ......
protected abstract string getshoutsound();
)
vb.net
public mustinherit class animal
.....
protected mustoverride function getshoutsound() as string
end class
注意點:
第一,抽象類不能例項化,剛才就說過『動物』例項化沒有意義;第二,抽象方法是必須被子類重寫的方法,其實抽象方法可以被看做是沒有實現體的虛方法;第三,如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其他的一般方法。
比如:現在我們有貓乙個類。有特異功能的叮噹貓除了繼承貓一般功能「叫」以外,還具有」變出東西「的特殊功能。這時就需要用到介面的知識了。
介面是把隱式公共方法和屬性組合起來,以封裝特定功能的乙個集合。一旦類實現了介面,類就可以支援介面所指定的所有屬性和成員。宣告介面在語法上與宣告抽象類完全相同,但不允許提供介面中任何成員的執行方式。所以介面不能例項化,不能有構造方法和字段,不能有修飾符,比如:public、private等;實現介面的類就必須要實現介面中所有的方法和屬性。
c#:
inte***ce ichange '定義介面
class machinecat:cat,ichange '繼承父類cat和實現介面
public machinecat(string name)
:base(name)
public string changething(string thing)
}private void button1_click(object sender,eventargs e)
vb.net:
public inte***ce ichange '定義介面
function changething(byval thing as string) as string
end inte***ce
public class machinecat '繼承父類cat
inherits cat
public overloads sub new() '過載建構函式
mybase.new()
end sub
public overloads sub new(byval name as string)
mybase.new(name)
end sub
end class
public class machinecat :implements ichange '實現介面
public function changething(byval thing as string ) as string implements ichange.changethings()
return "我有萬能口袋,我可變出"+ thing;
end function
end class
private sub buttton1_click(sender as object, e as eventargs) handles btnlogin.click
dim mcat as machinecat =new machinecat("叮噹")
messagebox(mcat.changething("各種各樣的東西!"))
end sub
從表象上看,抽象類可以給出一些成員的實現,介面卻不包含成員的實現,抽象類的抽象成員可被子類部分實現,介面的成員需要實現類完全實現,乙個類只能繼承乙個抽象類,但可以實現多個介面等。
還有三點幫助區分抽象類和介面:第一,類是物件的抽象,抽象類是類的抽象,介面是對行為的抽象。第二,如果行為超越了不同類的物件,可使用介面;對於一些相似的類物件,用繼承抽象類。第三,從設計角度看,抽象類是子類中發現了公共的東西,泛化出父類,然後子類繼承父類,而介面是根本不知子類的存在,方法如何實現還不確認,預先定義。抽象類是自底向上抽象出來的,而介面是自頂向下設計出來的。
物件導向 介面類 抽象類
python 沒有介面這個概念 介面類,抽象類 制定乙個規範.介面類,抽象類 python中就是一樣的 1,歸一化設計.2,制定乙個規範,凡是繼承我類的類,必須有我規定的方法.第一版class alipay def init self,money self.money money defpay se...
物件導向 抽象類和介面解析
在物件導向程式設計中,我們通過類來描述事物,這個描述可以是抽象的,因為不可能通過類描述所有的屬性和行為,可能同一類事物的不同個體有著行為上的差異。例如我們想用乙個類描述鳥的所有基本屬性和行為,而所有的鳥都繼承自這個類,我們可以把它稱為基類。而鳥的叫聲是有差異的,我們很難在基類中定義鳥的這個行為,這時...
OOP(物件導向)抽象類和介面
1.抽象類 abstract修飾的類就是抽象類 父類通常是抽象的,不能例項化 格式 public abstract class a 特徵 不可以直接例項化 可以有構造方法,可以有屬性 留給子類使用 可以有自定義方法 可以有抽象方法,子類必須重寫抽象父類的抽象方法,除非子類也是抽象類 應用場景 是乙個...