C#—接口 PK 抽象类

来源:互联网 发布:雷盾软件站 编辑:程序博客网 时间:2024/05/15 22:24

  面向对象的特点之一就是抽象,说道抽象就不得不提一下抽象类和接口,那么抽象类和接口是什么、又有什么关系和区别?让我们来探讨一下。

首先看一下百度百科的解释:

  抽象类:面向对象中,所有对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

  接口:程序接口,由一套陈述、功能、选项、其它表达程序结构的形式、以及程序师使用的程序或者程序语言提供的数据组成。

定义方法:

  抽象类:

啊

  接口:

啊

  定义时需要注意的:

    1)抽象类中含有抽象方法,定义时必须用abstract关键字修饰,且抽象类不能实例化。

    2)抽象类中可以包含非抽象的普通方法及构造方法;接口中的所有方法必须是抽象的。

    3)抽象类中的抽象方法的访问类型可以是public,protected;接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

    4)抽象类中可以包含静态方法;接口中不能包含静态方法。

我的理解:

  1)抽象类可以提供方法的具体实现,当抽象类的子类继承抽象类之后,会得到这些方法;接口只能提供方法名称而不能够写出具体实现,如果写出具体实现,实现接口的类在编译阶段就会报错,换句话说,实现接口的类都要写一遍接口方法的实现。

  2)由于C#中的单继承,一个类只能继承一个抽象类,一个类作为类型定义工具是有局限性的;而对于接口就不一样的,C#中允许一个类实现多个接口,而多个接口可以是不同类型的,所以实现多个接口的类就能有了多种类型。

  3)接口把“做什么”和“怎么做”分开了,这就是实现了解耦合,具体是解了方法和实现方法的类之间的耦合,这给程序的可维护性增强了,这是接口的一大好处。

  4)简单来说,接口是public的,是让别人使用的,所以接口不能有私有的属性和方法;抽象类可以有私有属性和方法。

  5)抽象类之所以称作抽象类,是因为其中有抽象方法,而且抽象方法必须由abstract关键字修饰;接口中的方法就不需要关键字来修饰。

  6)在缺省适配模式中,将接口放在顶层,下边为抽象类,可以同时结合接口和抽象类的优点,方便使用。


小结:抽象类和接口一定程度上具有相似性,在实际学习中我们要对比着去学习。


1




3 0
原创粉丝点击