抽象类与接口的异同及实践

抽象类与接口的异同及实践

一、相同点

都不能被实例化

二、不同点
  1. 抽象类可以定义具体的方法,(jdk8以后,接口也是可以定义具体的方法的,必须有default关键字)

  2. 接口是implements,抽象类是extends

  3. 设计理念不同,接口是“has-a”,抽象类是"is-a"

  4. 抽象类可以有构造器,接口没有,抽象类的构造方法是不能直接实例化的,但是一旦一个具体的类继承了抽象类,那么就可以在子类中调用抽象类的构造方法。

    参考:抽象类与接口的区别

三、实践
  1. 接口一般是用来定义一系列规范。

  2. 抽象类除了上面的功能还有就是实现某些公共的子类需要的方法。

在实际的使用中,用到的都很多,这里以RocketMQ一段源码来阐述,在RocketMQ中底层通信是利用Netty来做的。继承图如图:


其中RemotingService接口定义了基本的start(),shutdown(),registerRPCHook()方法,分别是启动服务,关闭服务,Jvm关闭回收资源方法。

RemotingServer和RemotingClient定义了下面集成需要实现的一些方法,主要是同步请求,异步请求等。

NettyRemotingServer和NettyRemotingClient是具体的实现类,主要是实现上面的接口,一个是接收和处理进来的请求,一个对服务端进行请求。

NettyRemotingAbstract是抽象类,其中定义了具体的子类方法,还有缓存对外的请求,注册请求处理器和RPC处理器等。也是实现了同步请求,异步请求等公共方法,所以在NettyRemotingServer和NettyRemotingClient的公共方法和实现都放在了该接口中。

具体的可以翻阅RocketMQ源码查看,这里可以简单总结抽象类主要是提供公共实现,而接口主要是进行规范和对外提供标准服务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值