C#中的接口和抽象类的比较

来源:互联网 发布:搜狐发展 知乎 编辑:程序博客网 时间:2024/06/05 14:59

   1  一个类可以实现任意多个 接口,但是最多只能对一个抽象类进行子类化
   2  一个抽象类可以包括非抽象方法,而一个接口的所有方法在效果上都是抽象的。
        所以抽象类中的方法的访问修饰符可以是public,internl,protected,protected internal或者private,而接口成员的访问修饰符在默认情况下都是public,在声明接口成员时,不允许使用访问修饰符(包括public)。
   3.抽象类中可以定义构造函数,接口不能。
   4.抽象类包含一个或多个抽象方法(只是定义,无方法体);  还可以有一个多个可执行方法;抽象类可以实现或继承接口;
   5接口只含方法、属性、事件、索引等的定义;在接口中定义的变量,会自动地成为类的常量(无须加上static和final);而且这些定义不能有修饰符且都属于Public类型;每个实现该接口的类,必须实现方法;否则编译出错;除非此类定义为抽象类(前面加上abstract);
   6.一个类如果要实现某个接口,除非它实现了该接口中承诺的所有方法,否则(即未实现或者仅仅实现部分方法),该类必须被声明为抽象类.而该类的子类也继承了这一特性.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
  

抽象类和接口的相同的地方:
    抽象类和接口都不能被实例化;
    接口中的方法也相当于抽象方法(接口是一个完全的抽象方法);

这是因为抽象类和接口的本质有些不同
抽象类是对一些类的对象的一个抽象,是一个不完全的类,需要进一步专业化.接口只是一个行为的规范或规定;
基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;

 
原创粉丝点击