J_Ignite

接口(interface)和抽象类(abstract class)的区别

  • 1、接口支持多继承,抽象类不能实现多继承。
  • 2、接口只能定义抽象规则,抽象类既可以定义规则,还可能提供已实现的成员。
  • 3、接口是一组行为规范,抽象类是一个不完全的类,着重族的概念。
  • 4、接口可以用于支持回调,抽象类不能实现回调,因为继承不支持。
  • 5、接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义字段、属性、包含有实现的方法。
  • 6、接口可以作用于值类型和引用类型,抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
abstract class A
{
    public int a = 0;   // 正确
    abstract public void func();  // 抽象方法
}
interface B
{
    public int a = 0;  // 错误
    public static int b = 0;  // 正确
    public void func();  // 接口方法不需要添加 abstract 关键字
}