第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

接口與基類

接口與基類

接口與基類什么時(shí)候應(yīng)該使用接口,什么時(shí)候應(yīng)該使用基類?如果我不想實(shí)際定義方法的基本實(shí)現(xiàn),那么它應(yīng)該始終是一個(gè)接口嗎?如果我有狗和貓課。為什么我想要實(shí)現(xiàn)IPet而不是PetBase呢?我可以理解ISheds或IBarks的接口(IMakesNoise?),因?yàn)樗鼈兛梢酝ㄟ^寵物放置在寵物上,但我不知道通用寵物使用哪種接口。
查看完整描述

3 回答

?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

讓我們以狗和貓類為例,讓我們用C#來說明:

狗和貓都是動(dòng)物,特別是四足哺乳動(dòng)物(動(dòng)物太普遍了)。讓我們假設(shè)你有一個(gè)抽象的哺乳動(dòng)物類,它們都是:

public abstract class Mammal

此基類可能具有默認(rèn)方法,如:

  • 飼料
  • 配偶

所有這些行為在任何一個(gè)物種之間都有或多或少相同的實(shí)現(xiàn)。要定義這一點(diǎn),您將擁有:

public class Dog : Mammalpublic class Cat : Mammal

現(xiàn)在讓我們假設(shè)還有其他哺乳動(dòng)物,我們通常會(huì)在動(dòng)物園看到:

public class Giraffe : Mammalpublic class Rhinoceros : Mammalpublic class Hippopotamus : Mammal

這仍然是有效的,因?yàn)樵诠δ艿暮诵?/trans>Feed()Mate()還是一樣的。

然而,長(zhǎng)頸鹿、犀牛和河馬并不完全是你可以用來做寵物的動(dòng)物。在這里,接口將是有用的:

public interface IPettable{
    IList<Trick> Tricks{get; set;}
    void Bathe();
    void Train(Trick t);}

上述契約的實(shí)現(xiàn)在貓和狗之間將是不一樣的;將它們的實(shí)現(xiàn)放在一個(gè)抽象類中進(jìn)行繼承將是個(gè)壞主意。

您的狗和貓定義現(xiàn)在應(yīng)該如下所示:

public class Dog : Mammal, IPettablepublic class Cat : Mammal, IPettable

理論上,您可以從更高的基類重寫它們,但從本質(zhì)上說,接口允許您只將所需的內(nèi)容添加到類中,而不需要繼承。

因此,因?yàn)橥ǔV荒軓囊粋€(gè)抽象類繼承(在大多數(shù)靜態(tài)類型的OO語言中,即.異常包括C+),但能夠?qū)崿F(xiàn)多個(gè)接口,它允許您嚴(yán)格地構(gòu)造對(duì)象視需要基礎(chǔ)。


查看完整回答
反對(duì) 回復(fù) 2019-06-01
?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

喬希·布洛赫自己說有效Java 2d:

比抽象類更喜歡接口

一些要點(diǎn):

  • 現(xiàn)有的類可以很容易地進(jìn)行修改,以實(shí)現(xiàn)新的接口。..您所要做的就是添加所需的方法(如果它們還不存在),并向類聲明中添加一個(gè)Implements子句。

  • 接口是定義混合器的理想方法。..松散地說,Mixin是一個(gè)類除了它的“主類型”之外還可以實(shí)現(xiàn)的類型,以聲明它提供了一些可選的行為。例如,可比較是一個(gè)混合接口,它允許類聲明其實(shí)例是相對(duì)于其他相互比較的對(duì)象排序的。

  • 接口允許構(gòu)造無層次的類型框架。..類型層次結(jié)構(gòu)對(duì)于組織某些事情是很好的,但是其他的事情并不能整齊地歸入一個(gè)僵化的層次結(jié)構(gòu)中。

  • 接口支持安全、強(qiáng)大的功能增強(qiáng)。通過每班包裝成語。如果您使用抽象類來定義類型,那么您將使希望添加功能的程序員別無選擇,只能使用繼承。

此外,您可以結(jié)合接口和抽象類的優(yōu)點(diǎn),提供一個(gè)抽象的框架實(shí)現(xiàn)類來與您導(dǎo)出的每個(gè)重要接口一起使用。

另一方面,界面很難進(jìn)化。如果將一個(gè)方法添加到一個(gè)接口中,它將破壞它的所有實(shí)現(xiàn)。

PS:買這本書。這要詳細(xì)得多。


查看完整回答
反對(duì) 回復(fù) 2019-06-01
?
夢(mèng)里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

現(xiàn)代風(fēng)格就是定義ipet佩特基。

該接口的優(yōu)點(diǎn)是其他代碼可以使用它,而不與其他可執(zhí)行代碼有任何聯(lián)系。完全“干凈”此外,接口也可以混合。

但是基類對(duì)于簡(jiǎn)單的實(shí)現(xiàn)和常見的實(shí)用程序很有用。因此,還提供一個(gè)抽象基類來節(jié)省時(shí)間和代碼。


查看完整回答
反對(duì) 回復(fù) 2019-06-01
  • 3 回答
  • 0 關(guān)注
  • 725 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)