一、抽象类与接口的选择依据
开发中选择什么时候选择接口和什么时候选择抽象类。我们可以通过抽象类和接口表现的本质关系来进行确定到底使用抽象类还是接口。
1.抽象类:抽象类往往表示的是一种“is a” 的关系。例如:“人”和”男人“,由于“男人”是人,因此“人”就是一个抽象的类,而“男人”就是一个子类。
2.接口:接口常常描述的是一种“契约”的关系。我们以合同的案例来进行说明,如:我们有一个“劳动合同”,劳动者和雇佣者要想建立劳动关系都需要进行签订合同。那么合同就是一个协议,签订就是这个合同定义的行为。若劳动者要和雇佣者建立关系,哪么就必须签订合同,因此劳动者和雇佣者就必须实现合同中的签订行为,从而建立雇佣关系。
通过以上的解释应该明白什么时候使用接口和抽象类。
二、抽象类和接口的区别
1.抽象类是需要子类进行继承,而接口则是需要进行实现的。
2.抽象类可以进行方法的声明和方法的实现,而接口只能声明方法。
3.抽象类定义的变量只是一个成员变量。而接口定义的变量则是一个全局的静态常量值。
4.抽象类定义的抽象方法子类必须进行实现的。若子类是一个抽象类的情况下,可以不实现父抽象类的方法。接口在JAVA8后接为了兼容Lambda提供了一个新的关键字“Default”,在接口中的方法只要使用了“Default”就可以在接口中进行设定默认的方法,当子类没有进行实现的情况下,使用接口中的默认方法。若没有使用“Default”定义的方法,子类必须进行实现的。
5.抽象类可以不声明抽象方法。
6.抽象方法要被实现,所以不能是静态的,也不能是私有的。接口中定义的方法可以是私有也可以是公有的。
7.抽象类只能单继承,而接口可以进行多继承。
三、抽象类和接口的相似点
1.抽象类和接口都不能进行实例化的,只能通过子类实现的。