美文网首页
浅谈抽象类和接口的区别

浅谈抽象类和接口的区别

作者: 叫我小码哥 | 来源:发表于2018-01-09 19:25 被阅读0次

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

    抽象类和接口的区别

    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里面的方法而不必重写。

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

    相关文章

      网友评论

          本文标题:浅谈抽象类和接口的区别

          本文链接:https://www.haomeiwen.com/subject/takgnxtx.html