• Java中的接口(什么是接口,接口的好处,具体的使用)


    1.什么是接口?

    官方概述:
    在java语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
    这种技术主要用来描述类具有什么功能,而并不给出每个类的具体实现。
    Balabalabala……..

    博主概述:接口是类的行为的抽象概述。

    你的概述:用一句你自己能听懂的话,将接口的概念概括一下,然后记在心里。(不必太复杂,不必特准确,重点是你自己一定要理解这句话!)

    举个栗子:
    在项目开发MVC分层的结构中,在Service层,我们常常使用到接口的方式。
    例如:我们编写一个关于订单的Service;
    步骤是:先创建一个接口,再编写其接口实现类。
    在定义接口方法时,将各种“行为”抽象成方法,此处:创建,查询,取消,完结,支付均是行为!

    public interface OrderService {
    
        /**
         * 创建订单
         */
        OrderDTO create(OrderDTO orderDTO);
    
        /**
         * 查询单个订单
         */
        OrderDTO findOne(String orderId);
    
        /**
         * 查询订单列表
         */
        Page<OrderDTO> findList(String openId, Pageable pageable);
    
        /**
         * 取消订单
         */
        OrderDTO cancel(OrderDTO orderDTO);
    
        /**
         * 完结订单
         */
        OrderDTO finish(OrderDTO orderDTO);
    
        /**
         * 支付订单
         */
        OrderDTO paid(OrderDTO orderDTO);
    }

    所以说,我们已经知道了我们将要去干什么,但至于怎么干,具体的怎么做,我们交给接口的实现类去做!

    2.使用接口的好处

    可扩展性好

           比如项目需要做一个订单模块,首先后端leader创建了一个订单的接口(定义了规范),然后把该接口具体怎么实现交给了小a来做,小a开始进行实现类的编写(接口的第一个实现类),但是过了很久以后,后端leader觉得小a写的这个实现类不太满意,想找人重新写订单模块。那么此时,接口的可扩展性就体现了出来,领导找到了小b,而小b只需要根据该接口重新创建一个类(接口的第二个实现类),并将该订单接口定义的所有方法重新实现一遍,就达到了重写订单模块的目的。而项目其他部分对订单模块的引用并不受到影响,因为其他模块对订单模块引用的是“接口”,而不是具体的实现类。

     

    举个栗子:

    Service层:

    订单接口 :OrderService

    订单接口实现类 : OrderServiceImpl 

    Controller层:

    private OrderService orderService;(对Service层的调用)

    此处注意:声明的是接口,而不是其实现类,你理解了吗?

    接口的多实现是Java多态的一种表现;

    3.使用接口的注意点

    自上而下分析(我个人的一个小技巧,先考虑是否是类和其关键字,然后按照类的组成部分,自上而下:构造器,域,方法,然后与其相关的类;按照这种规律来进行分析,屡试不爽)

    1.接口不是类

    2.接口关键字:interface     类实现接口关键字:implements

    3.接口没有构造方法

    4.接口不能被实例化

    5.接口的成员变量都是public,static,final修饰(默认)

    6.接口的方法都是public,abstract修饰(默认)(1.8以后方法可以加static关键字,但必须有方法体)

    7.接口的实现类必须实现接口所有的方法

    4.接口与抽象类的区别?

    依旧自上而下分析

    1.抽象类是类,接口不是类。(感觉自己说了句废话)

    2.抽象类的关键字是abstract修饰,接口的关键字是interface修饰。(感觉自己又说了句废话)

    3.抽象类有构造方法,接口没有构造方法。(但两者均不能被实例化,用我自己的话来概括就是,两者都是抽象派,没有具体的实际行为,所以不允许它们实例化!)

    4.抽象类的成员变量修饰随便(public,private,protected等等),接口的成员变量必须是public,static,final修饰(默认)(可以用来做定义常量的类)

    5.抽象类的方法可以是普通方法,也可以是抽象方法。接口的方法必须是public,abstract修饰(默认)(1.8以后方法可以加static关键字,但必须有方法体)

    6.抽象类的所有方法需要被子类全部实现(有一种情况例外,除非子类也是抽象类,其实就是把实现的责任又传递了下去);

     接口的所有方法必须被它的实现类全部实现(没有例外)

    7.最重要的一点,此处画重点,抽象类是单继承,接口是多实现;


    接口与抽象类的使用场景:

      抽象类是对本质属性的抽象;

        举个栗子:

        父抽象类:人          子类:男人

         接口是对行为的抽象;

        举个栗子:

        接口中的一个方法:创建订单()     实现类1: 第一种具体的创建过程      实现类2:第二种具体的创建过程

     


    如果此时的你,还是不太明白接口到底是什么,那我再举一个可能不太恰当的例子

    接口,顾名思义,它是个口,hahh,现在,低下你的头,把你电脑的USB插入口想象成是一个接口,这个接口可以插入三星的U盘,可以插入闪迪的U盘,可以插入8g的,也可以插入16g的,但是有一个重要前提:这些U盘需要满足这个接口所定义的规范,而接口的另一端。电脑内部直接对接的是接口,而不是这些U盘(接口实现类)。


    第一次写博客,如果有哪里写的不对,不够严谨,希望大家多多指正,我会认真反思。

    最后, 浮于表面看千遍,不如自己思一遍!

    希望这篇文章对你能够起到帮助!

     

  • 相关阅读:
    编码
    TCP
    Http
    信息安全
    https基本原理
    Android之ListView异步加载图片且仅显示可见子项中的图片
    android 一些数据转换方法
    Android 关于 OnScrollListener 事件顺序次数的简要分析
    图片的内存缓存控制
    Android实现图片宽度100%ImageView宽度且高度按比例自动伸缩
  • 原文地址:https://www.cnblogs.com/inu6/p/11649549.html
Copyright © 2020-2023  润新知