用了接口还有必要用抽象类吗?

本文探讨了接口与抽象类的区别及应用场景。重点分析了二者在定义规范、方法实现、继承方式等方面的差异,并通过实例说明如何合理选择使用接口或抽象类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

关于接口与实现类的区别,相信大家都能说出一二三来,但小编在这还是总结一下。


接口与抽象类

1、二者表达概念不同,接口是为所有实现类定义的统一行为规范,实现类的行为需要按照接口中的规范去做。而抽象类是一类事务的高度聚合,对于继承抽象类的子类来说,与抽象类是 "is a"的关系。

2、抽象类在定义方法时,根据子类的一致行为,可以给出方法的实现,也可以不给出;而接口,其中定义的方法都不能给出实现部分。

3、继承/实现 对于两者所涉及的实现是不同的。继承抽象类的子类,可以不用进行重写,延用抽象类的方法,让其子类去实现。而对于接口来说,它的实现类必须给出相应的方法实现。

4、在抽象类中新增方法的话,其子类可以不用做任何改动,而在接口中新增方法,子类全部都要给出方法的实现。这也是为什么说接口是规范的意思。

5、接口可以多实现,而抽象类只能单继承。所以,使用接口可以实现间接的多重继承。

6、接口成员变量默认为:

public static final

并且必须赋初值,因为用 final 修饰,所以不能被修改。

而抽象类中成员变量默认为:

default

用了接口还有必要用抽象类吗?

在接口和实现类中有必要使用抽象类吗?增加了抽象类有什么好处呢?

让抽象类去实现接口,而不是每个实现类去实现接口,实现类一致的行为(或者说大部分一致的行为)在抽象类中进行实现,而不一致的行为(或者一小部分不一致的行为),在抽象类中写成抽象方法,让子类去重写,减少子类重写接口所有方法的负担。

使用抽象类前
(使用抽象类前)

使用抽象类后
在这里插入图片描述

小结

上文中例子,抽象类的作用是将子类一致的行为(flying)抽象出来,放到抽象类中,而不是各子类去实现,让子类复用抽象父类中的方法。

以上只是小编的一些想法,如有更好的观点,欢迎交流。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值