接口
随着Java版本的升级,接口中不仅能定义抽象方法还能定义其他的方法
可以定义方法:抽象方法、默认方法default、静态方法、私有方法,为了解决接口升级带来的问题
注意Java不同版本之间的兼容性!
1、接口升级问题
- 多个实现类必须实现接口中的所有方法
- 如果需要添加新功能(接口添加新的方法),就要改写所有实现类
- 可以使用接口继承,但是兼容性有所下降
- 桥接模式(抽象保留接口引用),也可以解决接口升级的问题。抽象a、a实现s、接口s。结构复杂性提高了
2、接口中的方法们
2.1、抽象方法
public abstract void methodName(){
// 接口定义抽象方法,实现类 来实现
}
methodName(){}; // 简写
2.2、默认方法
Java8中的新特性,实现类可以直接调用默认方法,也可以覆盖重写,是否调用、是否重写都是非必须的。可以向接口中添加默认方法,让新的实现类调用或重写,从而解决了接口升级的问题
public default int methodName(int a){
// 有方法体
// 返回值类型,参数列表
// default不能省略
// 也只有public可以省略
}
2.3、静态方法
Java9中的新特性。静态级别,使用接口名直接调用
public static void xxx(){
// 接口名称直接调用,不能使用实现类对象调用
}
2.4、私有方法
冗余代码抽取
// 私有静态方法
private static void xxx(){
// 多个静态方法中冗余代码抽取
}
// 私有默认
private void xxx(){
// 多个默认方法冗余代码抽取
}
// 私有:接口内部使用,在默认方法、静态方法中调用
2.5、常量和枚举
// 枚举用例:项目里不同模块中配置个性化返回对象。
// 接口统一方法,返回枚举信息。
// 多个枚举实现同一个接口,面向接口编程,个性化配置,限制对象范围
public enum MyEnum implements xxx {
SUCCESS(true,7777,"操作成功!"),
FAIL(false,4444,"操作失败!");
//操作是否成功
boolean status;
//操作代码
int statusCode;
//提示信息
String message;
private MyEnum(boolean status,int statusCode, String message){
this.status = status;
this.statusCode = statusCode;
this.message = message;
}
}
// 公共、实现类无关、final:不可变,必须加上final
public static final int MUN = 10;
3、多实现与MRO
// 可以同时实现多个接口
// 继承优先于实现
// 父类中的默认方法优先于接口中的默认方法
// 避免父类和接口默认方法重名的问题
// 多接口同名方法:实现一就行了,方法本身只是约束作用
4、多态
// Java中多态较多体现在 面向接口编程,方法的覆盖重写也是多态的一种体现
// Python中多态的体现只有 方法重写