抽象类和interface
抽象类和interface都是对对象行为的定义。
抽象类通常使用模板方法模式来实现公用方法,并在抽象方法中定义子类的特定行为。
interface是将类的功能定义在接口中,这种接口相对于抽象类来说更加通用,多个类可以实现同一个接口。
实例化
抽象类和interface都不可以被实例化。
只要类中有抽象方法,该类就是抽象类,所以子类要实现抽象类的所有的抽象方法。
变量
abstract类的变量可以是private、protected、public的,也可以被static和final修饰,使用final修饰必须要给初始值,abstract类的变量的默认访问修饰符是default。
interface的变量只能是public final static的。
方法
abstract类中的方法可以是抽象方法,也可以是非抽象方法,抽象方法没有方法体,默认访问修饰符号是default。
interface的方法一般只能是抽象方法,且默认访问修饰符是public的,也可以有默认方法(default修饰) 和 私有方法(private修饰),但是private方法只能被默认方法调用。
默认方法的出现是为了解决接口新加一个方法定义,实现该接口的所有类都要实现该方法,默认方法是有方法体的,如果实现类不实现默认方法,它将继承该方法。
abstract类和interface中的非抽象方法都是可以被static修饰的。
继承
abstract类还是类的概念,只支持单继承。
interface是支持多继承的,即,一个接口可以继承多个接口。