首页 > 其他分享 >学习记录21接口新增方法、接口应用、适配器设计模式

学习记录21接口新增方法、接口应用、适配器设计模式

时间:2022-10-22 18:47:22浏览次数:56  
标签:方法 适配器 接口 static 设计模式 重写

JDK8开始接口中新增的方法

  • JDK7以前:接口中只能定义抽象方法
  • JDK8的新特性:接口中可以定义有方法体的方法(类型:默认(抽象)、静态)
  • JDK9的新特性:接口中可以定义私有方法
    在一个项目当中,一个接口被写好,然后由其他组使用,到了后期因为一些情况需要在接口中新增一些行为,那么其他组写的代码就得跟着一起改变,新特性为了避免这种现象,就加了新特性
    接口升级:
    一个app的版本得到了升级,随之它的接口中的功能也增加了很多,这就叫做接口升级。在接口升级的时候就可以使用有方法体的方法了

    JDK8以后新特性使用规则:
  • 允许在接口中定义默认方法,需要使用关键字default修饰
    作用:解决接口升级的问题

接口当中的默认方法

  • 接口中默认方法的定义格式:
    格式:public default 返回值类型 方法名(参数列表){}
    范例:public default void show(){}
  • 接口中默认(指的是public这个关键字可以不写,前提到的接口中的抽象方法默认,指的是public abstract关键字可以不写)方法的注意事项:
    默认方法不是抽象方法,所以不用被重写。但是如果要重写,重写的时候要去掉default关键字
    public可以省略,default不能省略
    如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须重写方法


    从图中可以看出,我们在只改变接口中代码的情况下,也实现了对象调用接口中的方法
    当想要重写方法时,只需要写出方法名,回车即可。而后,要将对应的default关键字去掉

    当对接了多个接口,并且接口中,有同名的方法,那么就必须进行重写,不然如下报错

接口当中的static方法

JDK8以后接口中新增的方法:

  • 允许接口中定义静态方法,需要用static关键字修饰
    接口中静态方法定义格式:
    public static 返回值类型 方法名(参数列表){}
    范例:public static void show(){}
  • 接口中静态方法的注意事项
    静态方法只能通过接口名调用,不能通过类名或对象名来调用
    public可以省略,static不能省略
    静态方法不能被重写


    从图上看出,调用方式不正确,必须用接口名来调用

从新复习一下重写的概念:重写是将子类从父类中继承下来的方法表中的某个方法进行覆盖,这样一来,确定的对象,调用确定的同名方法

JDK9以后新增的方法(私有方法)

在接口中,一些只服务于接口中方法的重复的代码,并且不希望外界能够访问或使用,那么我们就把它设置为私有的
在之前,我们是通过将重复的代码提出作为一个方法,用的时候再调用,但多数时候,由于这样的代码主要服务于行为,所以它实际上对用户来说没有什么意义,我们也不希望他被调用,于是乎就将其设定为私有
接口中的私有方法分为:
1.普通的私有:
格式:private 返回值类型 方法名(参数列表){}
范例:private void show()
服务于上面提到的默认(仅default修饰)方法
2.用static修饰的私有方法:
格式:private static 返回值类型 方法名(参数列表){}
范例:private static void show(){}
服务于上面提到的静态(仅static修饰)方法

接口的应用

  • 对于类:我们将多个类、但不是所有类要用到的方法定义为接口
  • 当一个方法的形参,是接口,那么,我们可以穿低于这个接口对接的任何类的对象这叫做接口的多态
    与面对对象的多态相同,类似于,父类引用指向子类实例化-->接口的引用指向实现类的对象:接口类型 对象名 = new 实现类名();

总结

  • 1.接口代表规则,是行为的抽象。想要让那个类拥有一个行为,那就与这个接口对接
  • 2.当一个方法的形参数据类型是接口类型时,可以传递接口所有实现类的对象,这种方式称之为接口多态

适配器设计模式

什么是设计模式?

  • 设计模式是一套被反复使用、多数人只晓的、经过分类编目的、代码设计经验总结。
    使用设计模式是为了可重用代码、让代码容易被他人理解、保证代码可靠性、程序的重用性。
    简单理解:设计模式就是各种套路
  • 适配器设计模式作用:解决接口与接口实现类之间的矛盾问题

什么矛盾呢?

测试类需要调用某一个方法,而这个方法在某个接口中,那么我将这个接口实现。但事实上,我只需要用到其中的一个方法,按这个接口中有100个方法,又由于接口的特性,我学要将其它99个方法进行重写。所以这个时候我们就要用适配器设计模式来解决这个问题

适配器(adapter)的创建与使用

  • 创建一个类adapter,利用implements关键字与目标接口对接,并对接口中所有的方法进行空实现(不写方法体)
  • 实现类不再对目标接口对接,而是对类adapter进行继承
  • 而后再对想要调用的方法进行单独重写即可
  • 那么我们再回过头来看这个类adapter,这个类中没有属性,而且重写的方法都是空方法,那么这个适配器对外界来说是没有任何意义的,我们也不希望外界能创建出它的对象以避免不必要的麻烦,所以我们利用abstract关键字把它改变为抽象类
    当然,这么来看代码量并没有减少。但实际上主要目的是为了减少实现类当中的代码量,一边清晰、快捷、方便的查看代码。(我们要分清主次)

还有一个小细节

适配器的使用需要实现类去继承适配器,但有可能这个实现类已经继承过一个父类了,根据继承的概念,子类是只能单继承、不能多继承的。如何解决呢?
解决方法:让适配器继承父类,子类再继承适配器

标签:方法,适配器,接口,static,设计模式,重写
From: https://www.cnblogs.com/hezhipeng/p/16816923.html

相关文章

  • go语言设计模式-单例模式
    GetInstance方法开放了instance变量的读权限,使得只能读到instance,而不能对其赋值varinstance*singelton=new(singelton),饿汉式:在main执行之前,编译期间通过new就已经被......
  • 一文打通Lambda 表达式和函数式接口
    Lambda表达式为什么使用Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更......
  • C语言网络接口函数inet_ntoa用法小坑与分析
    tags:CNetworkDebug问题今天看了一下网络编程,发现其中有一个接口函数很有意思,就是从二进制转换到点分十进制表示的IP地址的函数​​inet_ntoa()​​,直接使用倒是......
  • Java的接口和抽象类到底哪个更抽象
    Java的接口和抽象类到底哪个更抽象抽象类抽象方法是是不完整的方法,,它只是进行了声明,没有具体的方法实现逻辑,具体的实现逻辑由子类来完成。包含抽象方法的类是抽象类,通过ab......
  • 设计模式之工厂方法模式
    简介在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的......
  • 学习记录20接口
    接口为什么会有接口呢?问题的产生:上一篇学了抽象类,我们应该知道,抽象类存在的必要性,但有的时候,个别的子类中的方法不太适合提取成为共性方法,我们就会考虑在这个子类中写其......
  • 防止接口恶意刷新和暴力请求
    在实际项目使用中,必须要考虑服务的安全性,当服务部署到互联网以后,就要考虑服务被恶意请求和暴力攻击的情况,下面的教程,通过intercept和redis针对url+ip在一定时间内访问的次......
  • apipost动态获取登录token,其他接口同步调用
    1、新增登录接口,接口返回值包含token信息接口信息   返回值   2、在登录接口的后执行脚本,添加环境变量 apt.environment.set("accessToken",response.js......
  • 测试项目(五):数据分页查询(后端接口)
    好家伙, 这里我们必须考虑:当数据库表单数据过多时,我们必须增加分页展示想想上百条数据一页展示完,那么可能找不到我要的那条数据了 我们前后端分开处理:本篇介绍完成后......
  • 一起学习 Go 语言设计模式之建造者模式
    前言你去买车,你不会只买一个轮胎、一个发动机、一个方向盘,你买的是一辆包括轮胎、方向盘、发动机、底盘、电气系统和车身等多个部件组成的完整骑车。在设计模式中,建造者模式......