接口:一组 对外 行为 的 规范。要求实现接口的类必须实现所有接口的成员。
(包含属性和方法,只关注行为,不关注数据,且不关注行为的实现,实现有实现类完成。)
一组:可以有多个方法,
对外:接口成员有子类实现
行为:接口中只能包含抽象的成员(方法、自动属性(无方法体),索引器,事件 ,本质都是方法。)不能有字段和构造函数。
规范:要求子类必须自行实现,否则出错。
语法格式:
public interface I.....able //表示一种能力
{
}
1.接口中的成员不能添加访问修饰符(默认是public、但是不能写, 类默认是private修饰)
2.关键字:interface ,I...able(一种能力)
3.方法:(访问级别和接口相同,默认是 internal )方法返回值,方法名称(); //不能包含方法体 C#8.0可以包含方法体。
4.类与接口是多实现,必须实现所有接口的方法
---------------------------------------------------------------------------------------------------------------------------------
为了多态,接口不能被实例化,接口不能用new()创建对象。
接口不能被实例化,抽象类不能被实例化,静态类不能被实例化。
接口当中的成员不能被实例化,因为接口当中的成员没有实现。对象调用方法没有意义。
多态是为了指向子类对象。
---------------------------------------------------------------------------------------------------------------------------------
抽象类与接口的选用规则:
1.抽象类与子类是是 is a 的关系(是一种)
2.接口与实现类是 can do 的关系(能够做的功能)
3.类可以包含普通成员,接口都是抽象成员
4.类与类是单继承,接口的实现可以实现多个接口。
5.普通类可以用虚方法(可以写一点方法体)
6.抽象类是抽象方法(没有办法写方法体)
作用:
1.规范不同类型的行为,达到不同类型在行为上的一致性
2.扩展一个类已有的行为
使用方法,接口的显式实现
1.接口和接口之间可以多继承,并且可以多继承。
2.接口并不能去继承一个类,而类可以继承接口(接口只能继承接口,而类可以继承接口,也可以继承类。)
3.实现接口的成员必须实现该接口的全部成员。
4.一个类可以同时继承一个类并实现多个接口。如果一个类同时继承父类A,并实现类接口I...A那么语法上A(类)必须写在I...A(接口)的前面。
1.如果一个类实现了两个或者多个接口并且有相同的方法,显式实现接口。
也可以强制加上接口名来显式实现接口
(不能添加访问修饰符,默认是私有的 private )
解决多借口实现二义性问题,解决接口中成员对实现不适用的问题。
a.通过接口引用调用,实现类的应用。父引用,调父方法是多态的一种。
b.通过类引用去调用,因为是私有private的,没有办法去调用(会报错)。
(需要通过包装到另一个方法中后才能调用)
注:屏蔽多接口实现冲突。不让类来调用这个方法。