浅谈抽象类和接口的区别

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

抽象类和接口的区别

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



浅谈抽象类和接口的区别_第1张图片

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


浅谈抽象类和接口的区别_第2张图片

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

浅谈抽象类和接口的区别_第3张图片

输出结果为

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

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

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

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

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

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

浅谈抽象类和接口的区别_第4张图片

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

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

你可能感兴趣的:(浅谈抽象类和接口的区别)