實現過程必須在實現接口的類中完成
類繼承具有單根性,接口可多重繼承
父接口也成為該接口的顯示基接口
接口多重繼承時,派生接口名與父接口用冒號隔開,多個父接口之間用逗號隔開
接口的成員之間不能同名,繼承的成員不用再聲明,但接口可以定義與繼承而來的成員同名的成員,這稱為接口成員覆蓋了繼承而來的成員,這不會導致錯誤,但編譯器會給出一個警告,關閉警告提示的方法時在成員聲明前加上一個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();
}
}
