亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

有兩個問題:1、既然接口方法已經在類Cat中實現了,那么直接通過對象調用 c.catchmice();不就可以實現抓老鼠的功能了嗎?為什么還要把貓C強制轉換成接口類型?2、既然接口方法必須在類中實現,哪和直接在類中定義方法有什么區別?例如,如果狗爬樹也調用ClimbTree接口的話,是不是還得在狗的類里面再寫一次爬樹接口的函數體嗎?

? ? public class Cat : Pet,ICatchMice,IClimbTree

? ? {

? ? ? ? public Cat(string name):base(name)? //構造函數

? ? ? ? {

?

? ? ? ? }

? ? ? ? public override void Speak()? //override 重寫

? ? ? ? {

? ? ? ? ? ? Console.WriteLine(_name + " is speaking:" + "喵喵");

? ? ? ? }


? ? ? ?public void catchmice()? //實現接口成員,既要聲明且加上public 又要加上函數體

? ? ? ?{

? ? ? ? ? ? Console.WriteLine(_name + " had caught a mice!");

? ? ? ? }


? ? ? ? public void climbtree()

? ? ? ? {

? ? ? ? ? ?Console.WriteLine(_name + " is climbing a big tree!");

? ? ? ? }


? ? }


?class Program

? ? {

? ? ? ? static void Main(string[] args)

? ? ? ? {

? ? ? ? ? ? //用基類類型的引用,可以方便不同子類的統一管理 ,例如利用一個容器(數組)保存所有的子類

? ? ? ? ? ? Pet[] pets = new Pet[] { new Dog("喵喵"),new Cat("汪汪"),new Taidi("小三") };

? ? ? ? ? ? for (int i=0;i<pets.Length;++i)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? pets[i].Speak();

? ? ? ? ? ? }


? ? ? ? ? ? Cat c = new Cat("Tom");

? ? ? ? ? ? //ICatchMice catchM = (ICatchMice)c;

? ? ? ? ? ? //catchM.catchmice();

? ? ? ? ? ? c.catchmice();

? ? ? ? ? ? c.climbtree();

? ? ? ? ? ? Console.ReadLine();



? ? ? ? }

? ? }



正在回答

5 回答

強制轉換屬于顯示接口,而一般用隱式接口

當類實現多個接口時,并且接口中包含相同的方法簽名,可以標識出哪個方法屬于哪個接口


0 回復 有任何疑惑可以回復我~

可以去看看Gof的書。。。

0 回復 有任何疑惑可以回復我~

就是為了降低耦合度,提高你代碼的擴展性,這就是為什么采用接口。

把貓C強制轉換成接口類型的優點是讓你的代碼提高了擴展性啊,你可以是貓,狗,蜥蜴等等。如果你用Cat,那你只能是貓了。明白沒。。。

如果想讓狗爬樹,可以調用Climbtree接口,是需要重寫一次爬樹函數的。

0 回復 有任何疑惑可以回復我~

\\△石'必忍\九d△/次◇情事_,o∨二心入啟九o??丫條,\

0 回復 有任何疑惑可以回復我~

面向對象的基本原則:依賴倒轉原則,程序設計應該依賴抽象,而不依賴具體

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

有兩個問題:1、既然接口方法已經在類Cat中實現了,那么直接通過對象調用 c.catchmice();不就可以實現抓老鼠的功能了嗎?為什么還要把貓C強制轉換成接口類型?2、既然接口方法必須在類中實現,哪和直接在類中定義方法有什么區別?例如,如果狗爬樹也調用ClimbTree接口的話,是不是還得在狗的類里面再寫一次爬樹接口的函數體嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號