抽象类与接口的区别

抽象类和接口成就了面向抽象编程的设计思想,同时也是实现多台的基础技术之一。

接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法中不能包含任何实现。

抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能密封;如果子类没有实现所有的抽象方法,则该子类也必须声明为抽象类;

 abstract public class Animal

   //定义静态字段

    static protected int _id;

    //定义属性

    public abstract int Id{get;set;}

    //定义方法

     public abstract void Eat();

}

//实现抽象类

public class Act:Animal

{

     public override int Id

     {

        get{return _id;}

        set{_id=value;}

     }

   ///如果此处将该方法予以屏蔽,该类会报错,提示该类不实现继承的抽象方法Eat();如果想解除该错误,有两个方法,一个是继承实现Eat方法,二是将该类标记为抽象类;

     public override void Eat()

      {

        }

}

      public interface Testdd
        { 
            //方法
            int CompareTo(object o);
            //属性
            int Test();
            //索引器
            long this[int index]{get;set;}
        }

相同点:

  1.都不能直接被实例化,都可以通过继承实现其抽象方法;

  2.都是面向抽象编程的技术基础;

不同点:

   1.接口支持多继承,抽象类不能实现多继承;

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

    3.接口可以作用于值类型和引用类型;抽象类只能作用于引用类型;

    4.抽象类不能使用new关键字,也不能被密封,因为是抽象类不能被实例化;

    5.在抽象方法声明中不能使用static或virtual修饰符; 

原文地址:https://www.cnblogs.com/xiaolifeidao/p/3817189.html