zoukankan      html  css  js  c++  java
  • Java接口默认方法&接口的静态方法&接口的私有方法

    1.Java接口默认方法

    从Java8开始,接口允许定义默认方法

    格式:

    public default 返回值类型 方法名称(参数列表){

      // ...

    }

    备注:接口当中的默认方法,可以解决接口升级的问题

    public可以省略不写,但是default必须要有

    什么是接口升级的问题?

    因为接口的实现类必须实现接口的所有抽象方法,但是,当接口中新添加一个抽象方法,而接口的实现类都已经用于实际的生产活动中,要是把这些实现类再改变,则会其他与这些实现类相关的都受到了牵连。如何保证这些实现类固定不动,但是又要在接口中能新添加抽象方法,这时候,我们就让新添加的方法拥有一种默认的方法体。

     新添加一个抽象方法后,两个实现类出现报错

     修改:

    默认方法会被实现类继承下去

    新加的方法,MyInterfaceDefaultA和MyInterfaceDefaultB都不用改,却可以调用它。

     运行结果:

     总结:

    (1)接口的默认方法,可以通过接口实现类对象,直接调用

    (2)接口的默认方法,也可以被接口实现类进行覆盖重写

    运行结果:

     

     2.接口的静态方法

    从Java8开始,接口中允许定义静态方法

    格式:

    public static 返回值类型 方法名称(参数列表) {

      方法体

    }

    提示:就是将abstract或者default换成static即可,带上方法体。

    注意:

    不能通过接口实现类的对象来调用接口当中的静态方法

    接口实现类

     正确用法:

    通过接口名称,直接调用其中的静态方法

    格式:

    接口名称.静态方法名(参数);

     3.接口的私有方法

    背景:

    如果有方法体的两个方法之间重复的内容太多了,我们就要抽取出来。我们需要抽取出来一个共有方法,用来解决两个默认方法之间的重复代码的问题。

    但是这个共有方法不应该让实现类使用,应该是私有化的。

     修改后:抽取出共有方法

     但是这种修改方式,实现类也能调用这个默认方法methodCommon,我们的目标只想methodCommon()方法只被methodDefault1和methodDefault2调用。

    解决方案:

    从Java9开始,接口中允许定义私有方法

    (1)普通私有方法:解决多个默认方法之间重复代码问题

    格式:

    private 返回值类型 方法名称(参数列表){

      方法体

    }

    (2)静态私有方法:解决多个静态方法之间重复代码问题

    格式:

    private static 返回值类型 方法名称(参数列表){

      方法体

    }

    修改后:

     注意:private的方法只有接口自己才能使用,不能被实现类或别人使用

  • 相关阅读:
    [导入]google的网络U盘
    [导入]下载 Visual Studio 2005 Starter Kits,提高效率!
    TXT文件 是 好多列 组成,其中有一列是 身份证,如何 用EXCEL 打开时,不会变成 科学计数的形式?
    个人所得税2011新计算公式Excel版,及由税款倒推收入额
    ServU虚拟路径映射问题
    Access .mdb数据库 转成 SQLITE数据库
    undefined与null的区别
    从内存的角度来区分基本类型和引用类型的区别
    JAVA类加载和反射介绍
    onConfigurationChanged的作用
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13799022.html
Copyright © 2011-2022 走看看