Java8中的接口和抽象类到底有啥区别?

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

太仆寺网站建设公司成都创新互联公司,太仆寺网站设计制作,有大型网站制作公司丰富经验。已为太仆寺上千家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的太仆寺做网站的公司定做!

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

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

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

区别1:

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

区别2:

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

区别3:

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

区别4:

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

下面我举两个例子:

 
 
 
 
  1. public class HashMap extends AbstractMap 
  2.     implements Map, Cloneable, Serializable { 
  3.     ... 
  4. }     
 
 
 
 
  1. public interface Connection  extends Wrapper, AutoCloseable { 
  2. ... 

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

总结

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

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

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

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

本文转载自微信公众号「Java技术栈 」,可以通过以下二维码关注。转载本文请联系Java技术栈公众号。

本文名称:Java8中的接口和抽象类到底有啥区别?
本文网址:http://www.hantingmc.com/qtweb/news29/512379.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联