面向对象——接口

面向对象——接口

*概念

      接口(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、从设计角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知道子类的存在,方法怎样实现还不确认,预先定义。也就是说,抽象类是自底而上抽象出来的,而接口是自顶向下设计出来的。