接口与抽象类

在大学毕业时候,出去面试里问的最多的一道题就是接口与抽象类的区别,我还清楚记得当时接到一个电话面试,问的这道问题,当时我的答案让面试者哭笑不得。。。这个问题让我记忆很深刻,最近在深入学习java中,再次想起了这道题,这里来总结一下,给自己找点自信。

首先,共同点:

  1. 接口和抽象类都不能被实例化,也就是不能被new出来,它们生来就处在顶层,只能被继承和模仿。。。
  2. 接口和抽象类都包含了没有实现的方法,有许多书上写抽象方法,我觉得抽象方法需要abstract关键字修饰,而接口里的方法不需要这个关键字;其实它们两个可以包含没有方法体只有方法声明的方法。。
那么区别呢?就比较多了

接口这个名词大家可能在没接触编程之前就听说过,比如说网络接口、电话线接口等等,大家在买网线时只需要说RJ45接口,就能拿回来在电脑上用。这说明接口就是一种规范,生产电脑的厂家按照规范流出一个插口,生产网线的厂家按照规范做出插头,大家都遵循这个规范就行了。编程中的接口也是规范的意思,它是一个模块应该遵循的标准,所以只有方法的声明,不能存在方法的实现。

抽象类不一样,它体现的是一种模板设计,抽象类是多个子类的父类,它可以帮助子类实现一些功能,但一些功能它不知道怎么做,对于每个子类都有自己一套实现方式,这时父类就将这个方法声明为抽象方法,让子类各自实现。说白了,抽象类类似一种中间件,它不是最终的产品,最终的产品还需要子类来实现,但是它已经实现了一部分通用功能,但是需要进一步由子类来完善。


说了这么多,我们来总结一下两者在用法上的区别(from李刚-疯狂java讲义):

  1. 接口里只能包含未实现的方法声明,不包含实现的方法,它是规范,当然不能自身实现了;抽象类可以包含实现的方法,因为它是中间件,已经实现了一部分通用功能了。
  2. 接口里不能定义静态方法;抽象类里可以定义静态方法。
  3. 接口里只能定义静态常量Field,不能定义普通Field;抽象类则既可以定义普通Field,也可以定义静态常量Field。
  4. 接口里不包含构造器;抽象类里可以包含构造器,但是抽象类里的构造器不是用来创建对象,而是让其子类调用这些构造器来完成初始化操作
  5. 接口里不能包含初始化块;但抽象类则可以包含初始化块
  6. 一个类最多只能有一个直接父类,包括抽象类,但是一个类可以实现多个接口!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值