實現過程必須在實現接口的類中完成
類繼承具有單根性,接口可多重繼承
父接口也成為該接口的顯示基接口
接口多重繼承時,派生接口名與父接口用冒號隔開,多個父接口之間用逗號隔開
接口的成員之間不能同名,繼承的成員不用再聲明,但接口可以定義與繼承而來的成員同名的成員,這稱為接口成員覆蓋了繼承而來的成員,這不會導致錯誤,但編譯器會給出一個警告,關閉警告提示的方法時在成員聲明前加上一個new關鍵字,但如果沒有覆蓋父接口中的成員,使用new關鍵字會導致編譯器發出警報.
interface Interface1 { Void read(); //不同接口(不包含派生)中允許有同名的成員,如我在Interface2中定義read()也是可以的 String read() ( get; Set; //同一接口中的成員名不能重名,及時類型不同 ) } //接口可以多重繼承,多重繼承要用逗號隔開。父接口要與派生接口冒號隔開 //如我Interface1接口中有個void read()成員 Interface Interface3:Interface1,Interface2 { new Void read(); //如果派生接口中對顯示基接口中的成員進行重新定義時,需要使用new來解除警報 }
任務實施實例
老鷹、麻雀、鴕鳥、都是鳥類,根據三者的共性,提取出鳥類作為父類,並且具有各自的特點,老鷹吃小雞,麻雀吃糧食,鴕鳥吃青草
老鷹和麻雀都會飛,如何實現這個“飛”的功能
開放封閉原則
定義
軟件實體應該可以擴展,但是不可以修改
特性
對擴展是開放的
對修改是封閉的,開放既可以操作,關閉既不可以操作
1) 在父類中添加“飛”,但是鴕鳥不會飛,所以不能再父類中;
2) 在會飛的子類中添加“飛”功能。完全可以,但是違背了開放封閉原則,下次我們新加一個天鵝,我們還要去代碼去查看“飛功能是如何實現的”,然后在天鵝中添加“飛”方法,相同的功能。重復的代碼。明顯不合理,也不利於擴展
假如我在新增一個“氣球”,我繼承父類合適嗎?很顯然不行,我們需要一種規則,這種規則就是接口
3) 老鷹和麻雀都會飛就實現了“飛”這個接口,鴕鳥不會飛,就不實現這個接口。
例子:利用接口實現老鷹和麻雀會飛的方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口繼承與實施 { class tuon:niaol,Iflyable { public void fly() { Console.WriteLine("我是鴕鳥,我回跑"); } public override void write() { Console.WriteLine("我是鴕鳥,我吃青草"); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口繼承與實施 { class laoy:niaol,Iflyable { //接口實現過程需要在實現接口的類中進行實現 public void fly() { Console.WriteLine("我是老鷹,我會飛"); } public override void write() { Console.WriteLine( "我是老鷹,我吃小雞"); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口繼承與實施 { abstract class niaol { public abstract void write(); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口繼承與實施 { class Program { static void Main(string[] args) { //聲明一個接口數組flys 用來保存老鷹和鴕鳥類的接口方法 Iflyable[] flys = { new laoy(),new tuon()}; //立方foreah循環便利來輸出老鷹類和鴕鳥類中的接口方法 foreach (Iflyable outfly in flys) { outfly.fly(); //用輸出outfly參數來輸出接口的方法 } Console.ReadKey(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 接口繼承與實施 { interface Iflyable { //定義一個會飛的一個接口的方法 void fly(); } }