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的方法只有接口自己才能使用,不能被实现类或别人使用

原文地址:https://www.cnblogs.com/GumpYan/p/13799022.html