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 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
相关文章
- java基础---->序列化框架arvo的使用
- java中并不是任意多个接口都可以实现多实现
- Java架构师-微服务:微服务接口封装【RESTFul接口、RPC接口(grpc:谷歌的RPC框架)】【一般首选RESTFul接口封装方式(适用范围广)】【性能要求高时选用RPC接口封装方式】
- Java 25天基础-DAY 04
- Java异常的深入研究与分析
- java.net.URL请求远程文件下载
- Java基础-JVM
- Effective Java 第三版——65. 接口优于反射
- Java数组与内存控制
- 12、Java函数接口
- Java中抽象类和接口的区别
- Java泛型:泛型的定义(类、接口、对象)、使用、继承
- Java 接口中定义抽象方法有什么意义
- Java 基础(接口的应用:代理模式 Proxy)
- 8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
- java-基础-接口和抽象类
- 【 java 集合】Collection 接口中的常用方法
- Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例
- JAVA开源爬虫,WebCollector,使用方便,有接口。
- How to Compile Java DBus
- 基于Java实现Json文件转换为Excel文件
- 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系
- 【华为OD机试真题 Java】GPU算力问题
- 10.JAVA-接口、工厂模式、代理模式、详解
- java从包package中获取所有的Class