Java 8 中的抽象类和接口到底有啥区别?
上一篇栈长发了这篇《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 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
最新文章
- intellij idea让资源文件自动更新
- java7笔记
- android 资讯阅读器
- python字符串加颜色区别
- 机器学习:logistic回归
- 软工实践练习一(个人)----将Androidstudio的项目共享到github
- Duilib将UI资源文件打包到exe教程
- LNMP环境搭建配置memcache
- phpDesigner 工具快捷键巧用
- 将decimal类型的数值后面的0和.号去掉
- SQL 关于有单引号数据更新的问题
- eclipse 的缓存问题
- 别人的Linux私房菜(18)认识系统服务(daemon)
- 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
- Python logging 模块学习
- 01.VMware虚拟机上网络连接(network type)的三种模式--bridged、host-only、NAT
- POJ 2230 Watchcow(有向图欧拉回路)
- 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作
- EBS 11i升级R12
- 【BZOJ】1088: [SCOI2005]扫雷Mine(递推)
热门文章
- Java反序列漏洞
- c#中的ReadOnlySequenceSegment<;T>;和ReadOnlySequenceSegment<;T>;
- RabbitMQ Server安装及显示管理界面Installing on Windows
- 使用maven纯注解集成ssm
- xxe漏洞,及xml
- 转载:pycharm IDE 导入自定义模块
- python3-day5
- Harmony OS 开发避坑指南——DevEco Device Tool 安装配置
- Github 太狠了,居然把 ";master"; 干掉了!
- CPU 执行程序的秘密,藏在了这 15 张图里