上一篇栈长发了这篇《Java 8 有多牛逼?打破一切你对接口的认知!》,帮助许多人解开了疑惑,还有读者留言说两者还有啥区别,故引发了此篇:

在我们面试时也会经常遇到面试官问抽象类和接口的区别是什么,大部人肯定会说:接口中的所有方法都是抽象的,抽象类中的方法除了抽象方法还可以写实现方法,如果你还这样回答那你就 OUT 啦,要跟上形式。

这个问题我在面试一个 39 岁的程序员时,他居然也没回答上来,其实了解 Java 8 的同学应该都知道,Java 8 在接口中推出了默认方法、静态方法,打破了接口只能写抽象方法的传统,如果你还不知道的可以点击阅读我之前发的这篇文章。

既然接口都能写实现方法了,那么还要抽象类干嘛呢?Java 8 中的接口和抽象类到底还有啥区别?大家是不是都有困惑?

所以,栈长这篇带大家分析一下,不一定全,但希望对你有用。

区别1:

首先抽象类是一个“类”,而接口只是一个“接口”,两者的概念和应用场景不一样,这也是抽象类和接口的主要区别。

区别2:

即使在 Java 8 中接口也能写实现方法了,但却不能写构造方法,而在抽象类是可以写构造方法的,意味着抽象类是参与类的实例化过程的,而接口则不是。

区别3:

抽象类可以有自己的各种成员变量,并且可以通过自己的非抽象方法进行改变,而接口中的变量默认全是 public static final 修饰的,意味着都是常量,并且不能被自己和外部修改。

区别4:

接口可以实现多继承,而抽象类只能单继承。

下面我举两个例子:

public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
...
}
public interface Connection  extends Wrapper, AutoCloseable {
...
}

类与类只能单继承,而类与接口、接口与接口可以多继承。

总结

Java 8 中的接口和抽象类的区别除了接口中可以写实现方法之外这点变化,其他的还是保持不变的。

既然接口可以写方法实现了,那么抽象类的存在貌似是弱化了,因为类只能是单继承,耦合性不好,而接口可以多实现,可以灵活扩展,也不会增加类的耦合性。

虽然说是少用继承,多用组合的设计理念,但继承的场景也还是存在的,比如我们常用的模板设计模式就是抽象类和各种模板的子类,所以说,接口也不能完全代替抽象类的。

你认为抽象类的应用场景还有哪些呢?欢迎留言分享!

最后,Java 系列教程还会继续更新,关注Java技术栈公众号第一时间推送,还可以在公众号菜单中获取历史 Java 教程,都是干货。

近期热文推荐:

1.Java 15 正式发布, 14 个新特性,刷新你的认知!!

2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!

3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。

4.吊打 Tomcat ,Undertow 性能很炸!!

5.《Java开发手册(嵩山版)》最新发布,速速下载!

觉得不错,别忘了随手点赞+转发哦!

最新文章

  1. intellij idea让资源文件自动更新
  2. java7笔记
  3. android 资讯阅读器
  4. python字符串加颜色区别
  5. 机器学习:logistic回归
  6. 软工实践练习一(个人)----将Androidstudio的项目共享到github
  7. Duilib将UI资源文件打包到exe教程
  8. LNMP环境搭建配置memcache
  9. phpDesigner 工具快捷键巧用
  10. 将decimal类型的数值后面的0和.号去掉
  11. SQL 关于有单引号数据更新的问题
  12. eclipse 的缓存问题
  13. 别人的Linux私房菜(18)认识系统服务(daemon)
  14. 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
  15. Python logging 模块学习
  16. 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
  17. POJ 2230 Watchcow(有向图欧拉回路)
  18. 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作
  19. EBS 11i升级R12
  20. 【BZOJ】1088: [SCOI2005]扫雷Mine(递推)

热门文章

  1. Java反序列漏洞
  2. c#中的ReadOnlySequenceSegment&lt;T&gt;和ReadOnlySequenceSegment&lt;T&gt;
  3. RabbitMQ Server安装及显示管理界面Installing on Windows
  4. 使用maven纯注解集成ssm
  5. xxe漏洞,及xml
  6. 转载:pycharm IDE 导入自定义模块
  7. python3-day5
  8. Harmony OS 开发避坑指南——DevEco Device Tool 安装配置
  9. Github 太狠了,居然把 &quot;master&quot; 干掉了!
  10. CPU 执行程序的秘密,藏在了这 15 张图里