接口组成更细概述
接口的组成
-
常量
public static final -
抽象方法(实现类要重写所有的抽象方法)
public abstract -
默认方法(Java 8)
-
静态方法(Java 8)
-
私有方法(Java 9)
默认方法
为什么Java8之后会引入默认方法?
根据业务需求,需要增加功能就需要在接口中添加抽象方法,那么会造成这个接口的所有实现类都要重写这个新增的抽象方法或者新建接口继承这个接口并添加功能对应的抽象方法,而且一些情况下,某些实现类并不需要这个抽象方法,这样就造成了程序庞大,后期难以维护
默认方法有什么特点?
使用public default修饰的方法,可以在接口中写实现代码,实现类可以重写这个默认方法
public default 返回值 方法名(参数列表) {}
接口中默认方法的注意事项:
默认方法不是抽象方法,所以不强制重写,但是可以被重写,重写的时候去掉default关键字
public可以省略,default不能省略
静态方法
静态方法的定义格式
public static 返回值类型 方法名(参数) {}
public static void show() {}
接口中静态方法的注意事项:
静态方法只能通过接口名调用,不能通过实现类名或实例对象调用
public可以省略,static可以省略
私有方法
Java9中新增了带方法体的私有方法,这其实在Java8中就埋下了伏笔:Java8允许在接口中定义带方法体的默认方法和静态方法。
这样可能就会引发一个问题:当俩个默认方法或静态方法中包含一段相同的代码实现时,
程序必然考虑将这段代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,
因此用私有给隐藏起来,这就是Java9增加私有方法的必然性
接口中私有方法的定义格式
格式1: private 返回值类型 方法名(参数列表) {}
范例1: private void show() {}
格式2: private static 返回值类型 方法名(参数列表) {}
范例2: private static void show() {}
接口中私有方法的注意事项:
默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法