------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
什么是接口:
1. 接口就是一种规范
2. 定义了一组具有各种功能的方法(只是一种能力,没有具体实现,像抽象方法一样)
接口存在的意义:
1. 多态
2. 解决了类的多继承问题(抽象类只能单继承)
3. 解决了类继承以后体积庞大的问题
4. 接口之间可以实现多继承
定义接口的语法:
1.接口中只能包含方法(方法,属性,索引器,事件),不能包含在字段。
2.接口中的方法也不能有任何实现(就像抽象方法一样,直接加个分号)
3.接口中的成员不能有任何访问修饰符(哪怕是public),默认为public
4. 接口不能被实例化
使用接口的语法:
1.一个类可以实现多个接口
2.子类实现接口中的成员时,不能修改成员的访问修饰符、参数列表、方法名等。
3.实现接口的类,必须实现接口中所有的成员
例:
public interface IFlyable
{
//接口中的成员不能有任何访问修饰符(哪怕是public),默认为public
//接口也不能被实例化
void Fly(); //接口中的方法也不能有任何实现
string Name
{
get;
//set; //设置成只读
}
}
//实现接口的类,必须实现接口中所有的成员
class Person : IFlyable
{
public void Fly()
{
Console.WriteLine("人在飞");
}
public string Name
{
get
{
return "超人";
}
}
}
注意:
实现接口的时候直接写方法就可以了,不需要override关键字
为什么要用接口:
1.类不能多继承,所以在某些情况下,只能用接口来代替。因为【接口可以多继承】
2.接口的主要目的:就是为了实现多态
什么时候用接口:
当多个类型,都具有某个或某几个功能时(方法),但是这几个类型又分属于不同的系列(这几个类型没有共同的父类,这时就不能用抽象类了),所以这时,为了实现多态就可以考虑把这几个类型共有的方法提取到一个接口中,让这几个类型分别实现该接口。
例:
public class Animal //动物是一个类,动物都可以吃东西,但是不是所有的动物都能飞
{
public void Eat()
{
Console.WriteLine("吃东西");
}
}
public class Bird : Animal,IFly //由于鸟既有动物吃的方法,又能飞,所以既继承Animal动物类,又继承接口IFly。
{
public void Fly()
{
Console.WriteLine("鸟在飞");
}
}
public interface IFly //由于很多物体都能飞,但是他们不属于同一个系列,不包含其他共有的方法,所以定义为一个接口
{
void Fly();
}
public class Plane:IFly //飞机能飞,继承IFly()飞的方法
{
public void Fly()
{
Console.WriteLine("飞机在飞");
}
}
接口的继承:
当一个类同时继承了某个类,并且也实现了某些接口的时候,必须要将继承的类写在第一个。即先继承类,再写接口。
接口与接口之间的继承:()
public interface ISuperStudent : IFlyable, ISwimable, IStudey
{ }
类与接口之间叫实现:
public class Student : ISuperStudent
{
public void Fly()
{
Console.WriteLine("Fly.....");
}
}
显示实现接口:
显示实现接口目的:为了解决方法重命名的问题
显示实现接口必须是私有的。
//两个接口都有Fly方法
public interfaceIFlyable
{
void Fly();
}
public interfaceISuperMan
{
void Fly();
}
public classSuperStudent :IFlyable,ISuperMan
//由于此类继承了两个接口,并且两个接口都有Fly方法,所以使用了显示实现接口
{
public void Fly()
{
Console.WriteLine(" IFlyable接口的Fly方法");
}
//类中的成员如果不写访问修饰符则默认为private。
void ISuperMan.Fly() //显示实现接口
{
Console.WriteLine("ISuperMan接口的Fly方法");
}
//也可以这样实现此接口
//不报错但是这时无法区分是哪个接口的Fly()方法
// public void Fly()
// {
// Console.WriteLine("Fly.....werfefe.");
//}
}
//实现
SuperStudent ss = new SuperStudent();
这里调用的结果是IFlyable接口的Fly方法。
因为显示实现接口后,被实现的方法变成了private的。所以通过类对象访问不到
接口特点总结: