一、先来看一下接口和抽象类的定义
接口:接口的目的是对类的行为具有约束,更像是一个标准。要求类实现方法的有无,而不要求怎么实现。提供一种机制,强制让不同的类有相同的行为。
抽象类:抽象类的目的是代码复用。让类派生于抽象类。抽象类更像是一个模板。部分行为一致时,让抽象类A来做,而不需要每个类B都做。
二、接口和抽象类的异同
相同点:
1)都不能被实例化。
2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中方法后才能实例化。
不同点:
1)在成员变量上,抽象类可以有变量、常量、构造方法、有抽象方法也可以有非抽象方法;接口只能有常量、抽象方法。
2)在使用上,接口侧重于实现封装(接口隐藏内部实现),抽象类侧重于提取共性。
接口只有定义不能有方法实现(Java 1.8中可以定义default方法体),抽象类可以有定义与实现,方法可在抽象类中实现。
3)在继承上,接口可以继承多个父类,抽象类只能继承一个父类。
4)抽象类可以有构造器,抽象方法可以有public、protected和default这些修饰符;接口不能有构造器,接口方法默认修饰符是public,不可以使用其它修饰符。