# 接口与抽象类
  • 用途

    • 抽象类:是一个能够给多个派生类共享的通用的基类。定义共性,是什么。
    • 接口:提供了派生类遵循的通用基类。定义一种行为规范,能做什么。
  • 特征

    • 抽象类:
      • 是特殊的类,不能被实例化(除了通过实例化继承抽象类来获取抽象类中的成员之外);
      • 可以定义抽象方法,但是不能实现;
      • 继承抽象类的类必须把里面的抽象成员全部重写,抽象类除外。
      • 抽象类中可以包含的成员包括:方法,属性,索引器,事件,字段
    • 接口:
      • 不能被实例化;
      • 接口可以被多继承及实现;
      • 接口中不能包含实例字段、构造函数、终结器;
      • 正常情况下接口是公共的 public
      • 接口中可以包括的成员:方法,属性,索引器
  • 对比

    • 相同点
      • 都不能实例化
      • 都可以被继承
      • 都可以包含方法声明
      • 派生类必须实现未实现的方法
    • 不同点
      • 抽象类只能单继承,接口可以多实现;
      • 抽象类中可以有构造方法,接口中不能有;
      • 接口中不能包含字段,抽象类中可以;
      • 接口用 interface,抽象类用 abstract 定义;
  • 使用场景

    • 接口:如果对象关系不密切,但是若干的功能具有共同的声明,则用接口,提供单一的功能;
    • 抽象类:对象存在多个关系密切的版本,使用抽象类,提供丰富功能的场合;
更新于