面向对象——接口
*概念
接口(Interface)是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦实现了接口,类就能够支持接口所指定的全部的属性和成员。声明接口在语法上与生命抽象类全然同样,可是不同意提供接口中不论什么成员的运行方式。所以,接口不能实例化,不能有构造方法和字段;不能有public、private等修饰符;不能声明虚拟的或静态的等。值得注意的是,实现接口的类就必需要实现及口中的全部的方法和属性。
一个类能够支持多个接口,多个类也能够支持同样的接口。
**声明与应用
接口用Interface声明,而不是class,接口名称前要加“I”,接口中的方法或属性前面不能有修饰符、方法没有方法体。
interface Ichange { //声明一个Ichange接口,有一个方法ChangeThing,參数是一个字符串变量,返回一个字符串 string ChangeThing(string thing); }
接口实例应用
//接口的声明 interface IDoor { void Close(); //方法 void Open(); } // 自己主动门,有人时,自己主动打开,没人时,自己主动关上 public class DoorA:IDoor { private bool HavePerson = false; //是否有人,默认没有 public void Open() { if (HavePerson) Console.WriteLine("The doorA is Opend"); } public void Close() { if (!HavePerson) Console.WriteLine("The doorA is closed"); } } //添加�一个门,手推才会开,不推自己主动关上 class DoorB : IDoor { private bool IsPush = false; public void Open() { if (IsPush) Console.WriteLine("DoorB的门开了"); } public void Close() { if (!IsPush) { Console.WriteLine("DoorB的门关上了"); } } } class Program { static void Main(string[] args) { //创建实例 DoorA doora = new DoorA(); DoorB doorb = new DoorB(); doora.Close(); doorb.Close (); Console.Read(); } }
执行结果为:The doorA is closed.
DoorB的门关上了。
***接口与抽象类的差别
1、从形态上来说,抽象类能够给出一些成员的实现,接口却不包括成员的实现,抽象类的抽象成员能够被子类部分实现,而接口的成员须要实现类的全然实现,一个类仅仅能继承一个抽象类,但可实现多个接口。
2、类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。
3、假设行为跨越不同类的对象,能够使用接口;对于一些相似的类对象,用继承抽象类。比方说,猫、狗、兔子事实上都是动物,他们之间有非常多相似的地方,就能够让他们继承动物这个抽象类,可是飞机、麻雀、超人尽管有共同点都会飞,可是却是不同的类,这时候,我们就用接口来实现。
4、从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知道子类的存在,方法怎样实现还不确认,预先定义。也就是说,抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的。