1.接口的定義
接口的定義是指定一組函數成員而不實現成員的引用類型,其它類型和接口可以繼承接口。
2.接口的特點
(1)通過接口可以實現多重繼承,C#接口的成員不能有public、protected、internal、private等修飾符。原因很簡單,接口裏面的方法都需要由外面接口實現去實現方法體,那麼其修飾符必然是public。C#接口中的成員默認是public的,java中是可以加public的。
(2)接口成員不能有new、static、abstract、override、virtual修飾符。有一點要注意,當一個接口實現一個接口,這2個接口中有相同的方法時,可用new關鍵字隱藏父接口中的方法。
(3)接口中只包含成員的簽名,接口沒有構造函數,所有不能直接使用new對接口進行實例化。接口中只能包含方法、屬性、事件和索引的組合。接口一旦被實現,實現類必須實現接口中的所有成員,除非實現類本身是抽象類。
(4)C#是單繼承,接口是解決C#裏面類可以同時繼承多個基類的問題。
3.程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Bird
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
interface IFly
{
//接口中沒有訪問修飾符
void Fly();
}
interface ISpeak
{
void Speak();
}
class Mq : Bird, IFly
{ //在子類中實現接口中的方法
public void Fly()
{
Console.WriteLine("飛啊飛");
}
}
class Qe : Bird
{
}
class Yw : Bird, IFly, ISpeak
{
public void Fly()
{
Console.WriteLine("飛飛飛飛");
}
public void Speak()
{
Console.WriteLine("hello");
}
}
class Program
{
static void Main(string[] args)
{ //接口不能實例化
IFly fly = new Mq();
fly.Fly();
IFly f = Create("yw");
f.Fly();
Yw y = new Yw();
y.Fly();
y.Speak();
Console.ReadLine();
}
//簡單的工廠模式
static IFly Create(string bird)
{
IFly fly = null;
switch(bird){
case "mq":
fly = new Mq(); break;
case "yw":
fly = new Yw(); break;
default: break;
}
return fly;
}
}
}