zoukankan      html  css  js  c++  java
  • C#—接口和抽象类的区别?

    C#—接口和抽象类的区别?

     

    一、接口

    接口是指对协定进行定义的引用类型,其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。

    1、接口存在的意义是为了实现多态;


    2、接口中只能包含方法(属性、事件、索引);


    3、接口的成员不能有任何实现;


    4、接口不能被实例化;静态类、抽象类也不可以被实例化


    5、接口的成员不能有访问修饰符(默认为public);


    6、实现接口的子类必须将接口的所有成员函数实现;


    7、子类实现接口的方法时,不需要任何关键字,直接实现即可。(抽象类、虚方法需要加override)

    二、抽象类

    抽象类,在面向对象过程中,所有的对象都是类描绘的,反过来,类里面的数据不足以把具体的对象描绘出来,这样的类就是抽象类

    1、抽象方法只能出现在抽象类中,但是抽象类中可以包含普通方法。

    2、在父类中定义的抽象方法不能实现。

    3、抽象类不能实例化(也就是不能new出来)。

    4、抽象类与抽象方法需要添加abstract关键字。

    5、子类实现父类的抽象方法时,需要添加override关键字。

    6、如果抽象类的子类不是抽象类,那么子类中必须重写父类抽象类的所有抽象方法。

     七:

    在类声明中使用abstract修饰符的类称为抽象类。含有一个或一个以上的抽象成员的类,必须定义为抽象类。当方法声明包含abstract修饰符时,称该方法为抽象方法,虽然抽象方法同时隐含为虚拟方法,但是它不能有virtual修饰符。声明中包含abstract修饰的属性称为抽象属性。抽象方法或属性没有方法体或属性访问器。抽象类只能是其他类的基类,抽象类不能实例化,必须在继承中实现。抽象类中可以包含非抽象成员。抽象类的目的是提供一个合适的基类,以派生其他的类在类声明中使用abstract修饰符的类称为抽象类。
    ————————————————

    三、抽象类和接口的区别

    相同点

      1.不能实例化;

      2.包含未实现的方法声明

      3.派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)

    不同点

     

      1.接口可以多继承,抽象类不能实现多继承。

      2.接口只能定义抽象规则,抽象类既能定义抽象规则也能提供已实现的成员

      3.接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念

      4.接口支持回调,抽象类不能实现回调,因为继承不支持。

      5.接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法

      6.接口可以作用于值类型和引用类型,抽象类只能作用于引用类型(例如:Struct只能继承接口)

      7.抽象类应主要用于关系密切的对象,而接口则是适合为不相关的类提供通用功能

      8.接口着重于Can—Do关系类型,抽象类则偏重于IS—A式关系。

      9.接口多定义对象的行为,抽象类多定义对象的属性。

      10.如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类

      11.接口对应是面向对象编程思想的重要原则:面向接口编程,

  • 相关阅读:
    LeetCode120 Triangle
    LeetCode119 Pascal's Triangle II
    LeetCode118 Pascal's Triangle
    LeetCode115 Distinct Subsequences
    LeetCode114 Flatten Binary Tree to Linked List
    LeetCode113 Path Sum II
    LeetCode112 Path Sum
    LeetCode111 Minimum Depth of Binary Tree
    Windows下搭建PHP开发环境-WEB服务器
    如何发布可用于azure的镜像文件
  • 原文地址:https://www.cnblogs.com/zxdz/p/13322164.html
Copyright © 2011-2022 走看看