- jdk8以后,允许在接口中定义默认的方法,但是必须用关键字default修饰,作用是解决接口升级的问题,防止出现接口改变,实现类必须重写方法的现象
- 接口中默认方法的定义格式:public default 返回值类型 方法名(参数列表){};
- 接口中默认方法的注意事项:
- 接口中的默认方法不是抽象方法,不要求强制重写,但是如果重写,要去掉defau关键字
- public可以省略,但是default不能省略
- 如果实现类实现了多个接口,多个接口中存在了相同名字的方法,实现类就必须对方法进行重写
- jdk8以后可以在接口中定义静态方法,需要用static修饰
- 接口中静态方法的定义格式:public static 返回值类型 方法名(参数列表){};
- 接口中静态方法的注意事项:
- 静态方法不能通过实现类或者对象名调用,只能通过接口名调用
- public 可以省略,但是static不能省略
- static方法和默认方法一样,可以不重写
- jdk9以后可以定义私有方法
- 定义格式分为普通私有方法和静态私有方法:
- 普通私有方法:private 返回值类型 方法名(参数列表){};其中普通 私有方法是给默认方法服务的,默认方法可以调用,静态方法无法调用
- 静态私有方法:private static 返回值类型 方法名(参数列表){};静态私有方法只有静态方法可以调用
- 总结
- jdk7以前接口中只能使用抽象方法
- jdk8可以定义有方法体的方法(默认和静态)
- jdk9接口中可以定义私有方法(普通和静态)
- 接口的应用
- 接口时行为的抽象,想要哪个类拥有这个行为,就继承这个接口就可以了
- 当一个方法的参数时接口时,那么就可以传递这个接口的所有实现类的对象,这种称为接口多态,使用和多态一样,性质也和接口一样
- 适配器设计模式
- 应用场景:当接口中抽象方法过多,而我只需要其中一个时,就可以使用适配器设计模式
- 书写步骤:编写中间类xxxAdapter,然后让他去实现对应的接口,然后在让实现类去继承中间类,并且重写需要用到的方法,最后为了防止外界创建中间类的对象,中间的适配器类用abstract进行修饰