zoukankan      html  css  js  c++  java
  • C#——接口的意义以及与抽象类的区别

    接口的意义是什么呢?接口与抽象类又有什么区别?什么情况选择用接口?什么情况选择用抽象类?

    接口的意义:

    1、实际开发中的约束作用,继承接口的类必须实现接口规定的方法,方便多人开发中的协同,避免随意性。

    2、低的耦合度,会给以后代码的扩展带来很多便利。

    a.不用接口的代码:

    public class Teacher { public void Write() { Console.WriteLine("老师在写作...."); } }
    public class Student { public void Write() { Console.WriteLine("学生在写作...."); } }
    public class Person
    {
        public void Wirte(Student stu) { stu.Write(); }
        public void Wirte(Teacher tea) { tea.Write(); }
    }
    static void Main(string[] args)
    {
        Person p = new Person();
        Student stu = new Student();
        p.Wirte(stu);
        Teacher tea = new Teacher();
        p.Wirte(tea);
        Console.ReadKey();
    }

    结果:

    学生在写作....
    老师在写作....

    b.使用接口的代码:

    interface IPerson { void Write(); }
    public class Student : IPerson { public void Write() { Console.WriteLine("学生在写作...."); } }
    public class Teacher : IPerson { public void Write() { Console.WriteLine("老师在写作...."); } }    
    static void Main(string[] args)
    {
        IPerson p;
        p = new Student();
        p.Write();
        p = new Teacher();
        p.Write();
        Console.ReadKey();
    }

    结果:

    学生在写作....
    老师在写作....

    注释:比较两种写法,不仅仅是少了几行代码的事情。接口利用了类的多态特性,隐藏了类的类型,所以使用的时候很方便,只需关注到底需要调用何种方法,其实这就是简单工厂的雏形(下一章介绍),这无疑给以后的代码扩展带来诸多便利。

    接口与抽象类的区别:

    1、接口和抽象类侧重点不一样。接口侧重的是实现某一种方法(动作)的实现。抽象类则更丰富些,不仅具有一般类的特性,描述某一对象是什么,拥有哪些属性,拥有什么方法,而且还具有接口的特性,按照约定来约束自己的子类。

    2、接口和抽象类的应用情况不一样:如果用生动一点、形象一点的话来描述那就是,Man、Women、Child继承Person这个抽象类,都有眼睛、鼻子、耳朵等属性,还具有MakeNoise()的功能,这个时候用抽象类就很恰当。换另外一种情况举例说明接口,Car与上述的Man、Women、Child明显不属于一个种类,但是Car也有MakeNoise()的功能呀,这时候强行将Car继承Person, 你会发现这是多么的不恰当,因为Car无缘无故的拥有了不可能有的属性(眼睛、鼻子、耳朵等)。但是换接口呢?因为我们只要求实现MakeNoise()的功能,所以接口在此很适用。

    注释:一个子类只能继承一个基类(抽象类)(正如人Car继承了它的父类Machine就不能继承Person一样),但是可以继承多个接口(MakeNoise、MakeCO2)。

    需要注意的地方:

    1、 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
    2、 接口可以多继承,抽象类不行
    3、 接口定义方法,不能实现,而抽象类可以实现部分方法。
    4、 接口中基本数据类型为static 而抽类象不是的。

    写在最后:

    当你关注一个事物的本质的时候,用抽象类。当你关注一个操作的时候,用接口。抽象类的功能要远超过接口,但是,定义抽象类的代价高。每个子类只能继承基类。在这个基类中,你必须编写出其所有子类共有的属性和方法。接口在功能上虽然弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段降低了难度。

    参考:接口和抽象类有什么区别C#抽象类及其方法的学习接口实例和类实例比较

  • 相关阅读:
    11 Vue3 UI Framework Card 组件
    12 Vue3 UI Framework 打包发布
    15 Vue3 UI Framework 完工部署
    【译】使用 Visual Studio 调试外部源代码
    IntelliJ JSP 格式化问题
    JSP 学习笔记 | 五、MVC模式和三层架构 & JSP 案例实战
    JSP使用MySQL数据库报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    通过Navicate for MySQL导入SQL文件
    MAVEN 配置和基本使用
    JSP 学习笔记 | 二、JSP 脚本 & 案例实现 & 缺点分析
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/7692529.html
Copyright © 2011-2022 走看看