java中的接口和抽象类
一、接口和抽象类的区别
抽象类有哪些特性。
- 抽象类不能被实例化,只能被继承。(new 一个抽象类,会报编译错误)
- 抽象类可以包含属性和方法。方法既可以包含实现,也可以不包含实现。不包含实现的方法叫做抽象方法
- 子类继承抽象类,必须实现抽象类中的所有抽象方法。
接口的特性:
- 接口不能包含属性(也就是成员变量)
- 接口只能生命方法,方法不能包含代码实现
- 类实现接口时,必须实现接口中生命的所有方法。
抽象类更多是为了代码复用,而接口更侧重于解耦。
接口是对行为的一种抽象,相当于一组协议或者契约(可类比API接口)。调用者只需要关心抽象的接口,不需要了解具体的实现,具体的实现代码对调用者透明。
接口实现了约定和实现相分离,可以降低代码间的耦合,提高代码的可扩展性。
二、如何决定该用抽象还是接口
实际上,判断的标准很简单。如果我们需要一种is-a关系,并且是为了解决代码复用的问题,就用抽象类。如果我们需要的是一种has-a关系,并且是为了解决抽象而非代码复用问题,我们就用接口。
从类的继承层次来看,抽象类是一种自下而上的设计思路,先有子类的代码复用,然后再抽象成上层的父类(也就是抽象类)。而接口则相反,它是一种自上而下的设计思路,我们在编程的时候,一般都是先设计接口,再去思考具体实现。

浙公网安备 33010602011771号