接口
接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。
1.优点
一个类可以实现多个接口,接口可以让这个类不仅具有主类型的行为,而且具有其他的次要行为,比如所HashMap接口的主要类型是Map,而Cloneable接口是它具有一个次要类型,这个类型说明它可以安全的克隆。
2.缺点
如果向一个Java接口中加入一个新的方法,所有实现这个接口的类都要编写具体的实现。
抽象类
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
1.优点
具体类可以从抽象类中自动得到方法的默认实现。
2.缺点
一个类只能继承一个父类,所以抽象类作为类型定义工具的效能大打折扣。
抽象类和接口的区别
- 抽象类可以包含部分方法的实现,这是抽象类优于接口的一个地方
- Java是单继承的,每个类只能从一个抽象类继承,但是每个类可以实现多个接口,使用接口还可以实现混合类型的类。接口可以继承多个接口,即接口间可以多重继承。
- 将类抽取出通用部分作为接口容易,要作为抽象类则不太方便,因为这个类有可能已经继承自另一个类。
简而言之,抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。从某种意义上说,接口是一种特殊的抽象类。