• 第十八条:接口优于抽象类


    Java提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象类。这两种机制之间最明显的区别在于,抽象类允许包含某些方法的实现 ,

    但是接口则不允许。一个更加重要的区别在与,为了实现抽象类定义的类型,类必须成为抽象类的一个子类,也就是使用extends关键字继承。

    任何一个类,只要它定义了所有必要的方法,并且遵守通用约定,它就被允许实现一个接口,而不管这个类是处于类层次的哪个位置,接口实现使用

    关键字implements。因为Java只允许单继承,抽象类作为类型定义受到了很大的限制。

    现有的类可以很容易被更新,以实现新的接口。

    接口是定义mixin(混合类型)的理想选择。

    接口允许我们构造非层次结构的类型框架。

    抽象类的优越性在于,我们可以对于一些方法提供实现,而把一些需要客户端程序员具体去定义的方法定义为抽象的,而那些在抽象类中具体实现

    的方法,是基于定义为抽象的方法的,也就是具体实现的方法,只是简单的调用抽象方法,或者经过简单逻辑之后调用抽象方法。这样就简化了客户端

    程序员的工作压力,而不是像接口那样所有的方法都需要客户端程序员去实现。

    接口的优越性在于,一个类可以实现多个接口,而不是像抽象类那样,只能继承一个。

    结合这两者的优势,推出骨架实现类(AbstractInterface),骨架实现类一个抽象类,这个抽象类实现了需要实现的接口,由于骨架抽象类是一个抽象类

    可以包含抽象的方法,那么我们就把接口中需要客户端程序员需要实现的方法定义为抽象方法,而把接口中仅仅是需要调用其他抽象方法的方法,在骨架

    实现类中,定义为具体的方法,提供实现。  这样通过两者的结合,骨架实现类具有了接口和抽象类的优势。

    JDK的的集合框架中,具有大量这样的骨架实现类:AbstractCollection,AbstractSet,AbstractList,AbstractMap

  • 相关阅读:
    Spring中的JDBC API
    Spring中的AOP(二)
    Nginx服务器代理静态资源
    Intellij IDEA配置Maven(内置Maven和修改本地仓库地址和阿里云中央仓库)
    Java函数传参(String的不可变性)
    Java中的前向引用与类初始化顺序
    【解决】com.mysql.cj.jdbc.Driver failed to unregister it /Abandoned connection cleanup thread
    SSM框架项目结构以及版本匹配
    Web4.0中web.xml头信息
    【解决】org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4465862.html
Copyright © 2020-2023  润新知