接口和抽象类的区别
抽象类可以存放在普通成员函数,而接口中只能存在public abstract方法。
抽象类中的成员变量可以时各种类型的,而接口张的成员 变量只能是public static final 类型。
抽象类只能继承一个,接口可以实现多个。
接口的设计,是对类的行为进行约束,强制要求不同的类具有共同的行为,它只约束行为的有无,但不对如何实现行为进行限制。
而抽象类的设计,是代码的复用。当不同的类具有某些相同的行为A,并且其中一部分行为的实现方式一致时B,可以让这些类都派生于一个抽象类。在这个抽象类中实现了B.避免让所有的子类实现B,达到代码复用。
抽象类是对类本质的抽象,表达的是 is 的关系 ,比如VW is a Car。抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类实现。
接口是对行为的抽象 表示的是like a 的关系。比如Brid like a aircraft ,但其本质上还是brid,接口的核心是定义行为,实现类是谁,如何实现,接口并不关心。
当你注重本质的时候用抽象类,当你关注操作的时候用接口。
抽象类的功能远大于接口,但是抽象类代价高,只能继承一个。