当前位置: 首页 > 科技观察

Java8中的接口和抽象类有什么区别?

时间:2023-03-12 03:44:59 科技观察

在我们面试的时候,经常会遇到面试官问抽象类和接口有什么区别。大多数人肯定会说:接口中的所有方法都是抽象的,抽象类中的方法也是抽象的。你可以写实现方法。如果你还是这样回答,那你就OUT了,一定要跟上表格。当我采访一位39岁的程序员时,他没有回答这个问题。其实了解Java8的同学应该都知道,Java8在接口中引入了默认方法和静态方法,打破了接口,只能写抽象。方法的传统,如果你还不知道,可以点击阅读我之前发过的这篇文章。既然接口可以写实现方法,为什么还要抽象类呢?Java8中的接口和抽象类有什么区别?你困惑吗?不一定完整,但希望对你有用。区别一:首先,抽象类是“类”,而接口只是“接口”。两者的概念和应用场景不同,这也是抽象类和接口的主要区别。区别二:即使在Java8中,实现方法可以写在接口中,但是构造方法不能写,构造方法可以写在抽象类中,也就是说抽象类参与了实例化过程类,而接口没有。区别3:抽象类可以有自己的各种成员变量,可以通过自己的非抽象方法来改变,而接口中的变量默认都是publicstaticfinal修饰的,也就是说都是常量,不能可自行更改和外部修改。区别四:接口可以实现多继承,而抽象类只能继承单继承。我举两个例子:publicclassHashMapextendsAbstractMapimplementsMap,Cloneable,Serializable{...}publicinterfaceConnectionextendsWrapper,AutoCloseable{...}类和类只能单继承,而且类和接口,接口和接口可以是多继承的。总结一下Java8中接口和抽象类的区别,除了实现方法可以写在接口中,其他的变化都是一样的。现在接口可以通过写方法来实现,抽象类的存在似乎弱化了,因为类只能单继承,耦合性不好,而接口可以多种方式实现,可以灵活扩展在不增加类耦合的情况下。虽然说是采用了少继承多组合的设计理念,但是继承还是有场景的。比如我们常用的模板设计模式就是各种模板的抽象类和子类。因此,接口并不能完全替代抽象类。的。你认为抽象类还有哪些应用场景?欢迎留言分享!本文转载自微信公众号《Java技术栈》,可通过以下二维码关注。转载本文请联系Java技术栈公众号。