接口和抽象类的区别
- 一个类只能继承一个抽象类;而一个类可以实现多个接口。
- 抽象类中的成员变量可以是各种类型的,可以在子类重新定义,也可以被重新赋值;而接口中的成员变量只能是
public static final类型的,不能修改且必须有初始值。 - 抽象类中的成员方法可以是各种类型的,并且可以实现细节;而接口中只能是
public abstract方法,且不能有实现。
接口的设计目的,是对类行为进行约束,实现了某个接口就具有了对应的行为,是一种行为规范。
抽象类的设计目的:是为了代码复用,当不同类类具有某些相同的行为,且其中一部分行为的实现方式一致时,就可以将这些类进行抽象,是一种模板式设计。
抽象类是对整个类整体进行抽象,包括属性、行为,表达的是 “是不是” 的关系,比如: SUV is a Car 。抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类去实现。而接口却是对类局部(行为)进行抽象,表达的是"有没有"的关系。比如: 鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁、是如何实现的,接口并不关心。
使用场景:当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。
总结:抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为对于Java语言来说每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度。
接口是对类行为的约束,实现接口意味着具有对应行为;抽象类用于代码复用,表达“是不是”的关系。每个类只能继承一个抽象类,但可实现多个接口。接口定义行为,抽象类包含属性和行为。关注本质时用抽象类,关注操作时用接口。接口变更需所有实现类改动,抽象类可直接添加实现。
5609

被折叠的 条评论
为什么被折叠?



