接口和抽象类
接口是比抽象类更加抽象的抽象,接口的本质是契约,抽象类支持了代码复用
普通类:只有具体实现
抽象类:具体实现+规范(抽象方法)
接口:只有规范。好处是约束和实现分离
接口和抽象类的区别:
实现接口必须重写接口中的所有方法;继承抽象类可以重写(抽象)方法,也可以继续保持(抽象)。
抽象类只能单继承;implements可以实现多个接口。
设计目的:
接口的设计目的是对类的行为进行约束,也就是提供一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。
抽象类的设计目的是代码复用。当不同的类具有某些相同的行为(方法),且其中一部分行为的实现方式一致时,可以让这些类都派生于一个抽象类。在这个抽象类中实现这些行为,避免让所有子类实现相同的行为,这就达到了代码复用的目的。抽象的行为则留给各个子类自己实现(它们的实现方式不同)。因为抽象的行为没有实现,所以抽象类不允许实例化。