首先,从定义角度来看,接口使用interface
关键字定义,而抽象类使用abstract class
关键字定义。
其次,在实现方式上,类使用implements
实现接口,但使用extends
继承抽象类。一个类可以实现多个接口,但只能继承一个抽象类。
第三,在方法实现方面,接口中的方法默认是抽象的(Java 8前),不能有具体实现(Java 8后可以有默认方法);而抽象类既可以包含抽象方法,也可以包含具体实现的方法。
第四,在成员变量方面,接口中的变量默认都是public static final
的常量;而抽象类可以有普通的成员变量。
第五,接口不能有构造方法,抽象类可以有构造方法(虽然不能直接实例化,但子类可以调用)。
最后,在设计理念上,接口更强调"能做什么"的行为规范,而抽象类更强调"是什么"的类层次关系。
在实际开发中,如果只是定义行为规范,我会优先考虑使用接口;如果需要共享代码或建立类层次关系,我会选择抽象类