1.抽象类可以存在普通成员函数,而接口中只能存在public abstract方法。
2.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
3.抽象类只能继承一个,接口可以实现多个。
深层次点来说:
接口的设计目的,是对类的行为进行约束,更准确来说是对类的行为的有无进行约束。他提供一种机制,强制要求不同的类具有相同的行为。但他只约束了行为的有无,但不对如何实现行为进行约束。
而抽象类的设计目的,是为了代码的复用,让不同的类具有相同的行为,当这些相同的行为具有相同的实现方式时,即可将这部分转为抽象类,然后让所有的子类去继承这个抽象类,这就达到了代码复用的目的。
总而言之,接口像是Like,而继承像是Is。