第20 条:接口优于抽象类

接口优于抽象类

定义:

接口:没有方法实现(当然jdk1.8新加的default不算)
抽象类:可以有方法实现

区别:

接口:允许多实现
抽象类:只能单根继承

优缺点

接口不会改变类的层级,抽象类会改变类的层级。如何理解,
比如抽象类People有三个子类,学生,老师和父亲,他们是一个层级的,都是people的子类。
在这里插入图片描述
现在我们又有个抽象类audit只需要teacher和father类来继承,而student是不需要的,如下
在这里插入图片描述
这样子本来student,teaccher,和father是同一个层级的,现在搞的他们层级混乱了。可想而知抽象类多了层级会混乱成什么样子,
同时,对于接口来说,只是对于类功能的扩展,哪个类需要实现这个接口的功能就继承接口就行,不会破坏类的层级。
所以从这个角度来讲,接口是由于抽象类的。

抽象类的优点

抽象类可以配合接口来实现骨架
我们都知道实现接口的类都需要实现在实现中重写所有的定义在接口中的类,但是接口中的有些方法我们是不需要实现的,他有自己默认的实现方法,(当然1.8以后在接口中实现的default也是基于这个考虑的,现在我们暂时不管这个)
可以参考Collection接口,和AbstractCollection抽象类

public abstract class AbstractCollection<E> implements Collection<E>

Collection作为集合的接口,里面定义了集合需要实现的方法,AbstractCollection抽象类实现了这个接口,为很多方法加上了默认的实现,所以一个集合类在继承AbstractCollection抽象类的时候只需要实现其中定义为abstract的方法就可以了,而不用对Collection中的所有方法都去写他的实现了。这个就是抽象类的优点

总而言之

接口通常是定义允许多个实现的类型的最佳途径。如果你导出了一个重要的接口,就应该坚决考虑同时提供骨架实现类。而且,还应该尽可能地通过缺省方法在接口中提供骨架实现,以便接口的所有实现类都能使用。也就是说,对于接口的限制,通常也限制了骨架实现会采用的抽象类的形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值