接口和抽象类的区别

接口是对类行为的约束,实现接口意味着具有对应行为;抽象类用于代码复用,表达“是不是”的关系。每个类只能继承一个抽象类,但可实现多个接口。接口定义行为,抽象类包含属性和行为。关注本质时用抽象类,关注操作时用接口。接口变更需所有实现类改动,抽象类可直接添加实现。

接口和抽象类的区别

  • 一个类只能继承一个抽象类;而一个类可以实现多个接口。
  • 抽象类中的成员变量可以是各种类型的,可以在子类重新定义,也可以被重新赋值;而接口中的成员变量只能是public static final类型的,不能修改且必须有初始值。
  • 抽象类中的成员方法可以是各种类型的,并且可以实现细节;而接口中只能是public abstract方法,且不能有实现。

接口的设计目的,是对类行为进行约束,实现了某个接口就具有了对应的行为,是一种行为规范。
抽象类的设计目的:是为了代码复用,当不同类类具有某些相同的行为,且其中一部分行为的实现方式一致时,就可以将这些类进行抽象,是一种模板式设计。

抽象类是对整个类整体进行抽象,包括属性、行为,表达的是 “是不是” 的关系,比如: SUV is a Car 。抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类去实现。而接口却是对类局部(行为)进行抽象,表达的是"有没有"的关系。比如: 鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁、是如何实现的,接口并不关心。

使用场景:当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

总结:抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为对于Java语言来说每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dzhuser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值