浅谈抽象类和接口的区别

最近我看了一些接口和抽象类的区别,在这里我将我的所总结的内容分享给大家。

抽象类和接口的区别

1.抽象类使用abstract class 定义,抽象类既可以有抽象的方法也可以有非抽象的方法,既可以静态属性也可以非静态属性



        接口使用interface定义,属性用 public final static 修饰,如果没有写关键字,虚拟机会默认添加上述关键字。jdk8之前接口里的方法只能是抽象方法而且被public abstract修饰,如果没有上述关键字虚拟机会默认添加,jdk8之后接口里的方法既可以有抽象方法也可以有默认方法。


2.抽象类是一种类别,抽象类具有构造方法。

输出结果为

接口是一种行为规范,接口是没有构造器的。

3.抽象类只能单继承,接口可以被多个类实现,接口和接口之间可以多继承。

4.接口弥补了JAVA单继承缺陷

       例如: 有Person类 ,Person会做饭,那么Person就要继承cook类,Person还会讲课那么Person就要继承Teacher类,JAVA中规定了类和类之间是单继承,所以刚才的例子就不能通过抽象类实现了,把抽象类再向上抽象。抽象为行为规范,这是Person就可以实现cook接口和Teacher接口了。

5.抽象类是一种自下向上的一种抽象。这种模式在JAVA中用的比较多,其中在JAVASE集合部分中就有用到。

这是集合中Map中的一张框架图

我们会发现其中 TreeMap,HashMap,WeakHashMap均继承于抽象类AbstractMap,AbstractMap类实现接口Map。当我们打开AbstractMap源码时,我们会发现AbstractMap里面都实现了Map接口的方法。这样做的好处就是提高代码的复用性,继承AbstractMap的子类直接使用AbstractMap里面的方法而不必重写。

接口是自上向下的行为规范,实现该接口的子类必须按照接口的行为规范去编写,所以接口是自上向下的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,391评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,584评论 0 11
  • 我真的是一个没有什么志向的人,我对自己未来并没有什么期待。只想要嫁一个好男人,生两个可爱的宝贝,然后可以不挨饿,不...
    卡卡0625阅读 1,339评论 0 0
  • 静语轻枫阅读 1,131评论 0 0