抽象类与接口有以下共同的特征:
接口和抽象类都不能被实例化,它们都位于继承的顶端,用于被其他类实现和继承。
抽象类和接口中都可以包含抽象方法,实现接口或继承抽象类的子类都必须实现这些抽象方法。
接口作为系统与外界交互的窗口,接口体现的是一种规范。接口规定了子类实现的时候必须要实现的方法。从某种程度上来说的话,接口是整个系统的目录,他要求了每一块必须完成的标准,所以一个系统中的接口并不经常改变。
抽象类作为系统中多个子类的父类,它所体现的是一种模板式的设计。它可以被当为一种中间产品,由中间产品到最终的产品可能有很多不同的实现方式,然后实现方式不同导致最终的结果不同,即最终的功能不同。
接口和抽象类还有以下的差别:
接口中只有抽象方法,没有已经实现的方法,抽象类可以包含普通的方法。
接口中只能定义静态常量,不能定义普通变量。抽象类中即可以定义静态常量,也可以定义普通变量。
接口中不能定义静态方法,而抽象类中可以定义静态方法。
接口中没有构造器。抽象类中可以使用构造器,其构造器的作用是实现对抽象类的初始化操作。
一个类中只能有一个父类(包含抽象类)。一个类可以实现多个接口,通过接口可以解决JAVA不能多继承的问题。
使用时注意的问题:
优先使用接口,假如多个接口中有重合的方法,则用抽象类解决这一问题。