Java抽象类与接口的异同及使用场合

什么是抽象类?编程

抽象类是特殊的类,只是不能被实例化;除此之外,具备类的其余特性;重要的是抽象类能够包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类能够派生自一个抽象类,能够覆盖基类的抽象方法也能够不覆盖,若是不覆盖,则其派生类必须覆盖它们。抽象类不能被密封。若是派生类没有实现全部的抽象方法,则该派生类也必须声明为抽象类。设计模式

什么是接口?函数

接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR容许接口能够包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。spa

例子:飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;可是F22属于飞机抽象类,鸽子属于鸟抽象类。设计

 

相同点: (1)都不能被直接实例化,均可以经过继承实现其抽象方法。继承

              (2)都是面向抽象编程的技术基础,实现了诸多的设计模式。索引

不一样点:(1) 接口支持多继承;抽象类不能实现多继承。 接口只能定义抽象规则;接口

              (2)抽象类既能够定义规则,还可能提供已实现的成员。 接口是一组行为规范;事件

              (3)抽象类是一个不彻底的类,着重族的概念。 接口能够用于支持回调;class

              (4)抽象类不能实现回调,由于继承不支持。 接口只包含方法、属性、索引器、事件的签名,

                      但 不能定义字段和包含实现的方法;

               (5)抽象类能够定义字段、属性、包含有实现的方法。 接口能够做用于值类型和引用类型;

               (6)抽象类只能做用于引用类型。例如,Struct就能够继承接口,而不能继承类。

               (7)抽象类有构造方法,接口却没有构造方法。

接口的应用场合:

  1. 类与类以前须要特定的接口进行协调,而不在意其如何实现。
  2. 做为可以实现特定功能的标识存在,也能够是什么接口方法都没有的纯粹标识。
  3. 须要将一组类视为单一的类,而调用者只经过接口来与这组类发生联系。
  4. 须要实现特定的多项功能,而这些功能之间可能彻底没有任何联系。

抽象类的应用场合:

一句话,在既须要统一的接口,又须要实例变量或缺省的方法的状况下,就可使用它。最多见的有:

  1. 定义了一组接口,但又不想强迫每一个实现类都必须实现全部的接口。能够用abstract class定义一组方法体,甚至能够是空方法体,而后由子类选择本身所感兴趣的方法来覆盖。
  2. 某些场合下,只靠纯粹的接口不能知足类与类之间的协调,还必需类中表示状态的变量来区别不一样的关系。abstract的中介做用能够很好地知足这一点。
  3. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,能够共享的,无需子类分别实现;而另外一些方法却须要各个子类根据本身特定的状态来实现特定的功能
相关文章
相关标签/搜索