1.什么事接口
01.接口就是为了约束方法的格式(参数和返回值类型)而存在的
02.接口可以实现多继承,弥补单继承的缺陷。
03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知
04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体
05.如果一个类实现了某个接口,就得实现该接口中所有的方法
06.接口要谨慎使用,防止出现接口污染!
07.接口仅仅代表一种能力,实现该接口的类和接口没有继承关系
08.接口是用来实现的,类是用来继承的。
09.其实很多时候,看似可以不用接口,因为接口就是一个方法的约定,
表明你这个类必须要有某些方法,但是不写接口也可以有这些方法,用了接口,
就可以使用接口变量,统一调用,实现多态。
10.接口中只能定义方法,不能定义变量。
2.抽象类和接口的区别:
当需要的各个对象之间存在父子类关系时,可以考虑使用抽象类,
当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口。
实现类 在实现接口的方法是 不需要override关键字
接口里定义方法直接从放回值开始 比如
void Eat();
接口底层编译器默认加publlic abstract
3,创建一个接口的例子
//创建一个飞的接口
public interface IFly
{
//接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体
void Say();
}
//创建一个吃的接口
//吃的接口
public interface IEat
{
//接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体
void eat();
}
//创建一个鸟类来实现飞的接口和吃的接口
public class Bird:IFly,IEat{
public void Say()
{
Console.WriteLine("鸟在飞");
}
public void eat()
{
Console.WriteLine("鸟在吃");
}
}
//创建一个plan飞机类 实现接口飞
public class Plan{
public void Say(){
Console.WriteLine("飞机在飞");
}
}
//Test 去测试
//定义接口数组实例化对象
IFly[] ifly ={new Gird(),new Plan()};
//循环数组调用方法实现多态
foreach (IFly iFly in iFlies)
{
iFly.Say();
}
4.接口名实现 方法
注:如果有一个类要实现两个接口,不巧的是这两个接口(如:IFly,IPlay)中右两个同命名的方法(Eat)
我们都知道
如果一个类实现了某个接口,就得实现该接口中所有的方法
这怎么办呐?自有解决的方法的:
我们就可以使用接口名.方法来实现
//实现了IFly和IPlay两个接口
public class Dog:IFly,IPlay
{
//如果一个类实现了某个接口,就得实现该接口中所有的方法
//这样我们就可以使用接口名.方法来实现
void IFly.Say()
{
}
void IEat.Eat()
{
}
}