jdk8/9接口中的新特性
JDK1.7之前
> 抽象方法
> 常量
JDK1.8
> 抽象方法
> 常量
> 默认方法
> 静态方法
JDK1.9
> 抽象方法
> 常量
> 默认方法
> 静态方法
> 私有方法
(实现类无法对该私有方法重写,并不是对外界来用的,是给自己内部的默认方法和静态方法来使用的,将默认方法,静态方法重复的代码可以抽取到私有方法中,默认方法和静态方法在接口里面调用私有方法。外界用的时候用默认的和静态的方法就可以了)
JDK1.8 之后接口中的默认方法,静态方法,1.9的私有方法都是有方法体的
接口中的常量可以通过 接口名.常量名 调用
接口中的方法
抽象方法 实现类必须重写 实现类对象调用
默认方法 实现类可以重写也可以不重写 实现类对象调用
静态方法(用的少) 实现类不能重写 只能使用接口名调用
私有方法(jdk8不能用,jdk9以后都可以用) 实现类不能重写 只能在本接口中被默认方法或者静态方法调用
一个实现类有实现的多个接口中有相同方法名的抽象方法,只要重写一个即可(因为本来都一样)
不同名的抽象方法就需要都重写了
一个实现类有实现的多个接口中有相同方法名的默认方法,则必须重写默认方法(因为不知道你要用那个,所以自 己必须重写方法)
接口的默认方法可以供实现类调用或者重写。
接口的默认方法的定义格式:
public default 返回值类型 方法的名称(参数列表){
方法体
}
通过创建接口实现类对象进行使用默认方法
接口中的 默认方法 在实现类中可以重写也可以不重写,不是强制性重写的
接口中的默认方法满足不了实现类的需求时,我们可以在实现类中,重写默认方法再用实现类对象进行使用,反之用实现类对象直接使用
重写完方法后,default关键字没有了,不能写
默认方法出现的原因
用抽象方法的话,只要是实现了该接口的实现类都要重新,用默认的方法时只是哪个实现类需要,哪个实现类可以直接用默认方法,不满足要求的话实现类还可以进行重写再用,均不影响其他实现类
可以解决接口升级的问题(就是加功能,且不影响其他实现类)
接口的静态方法只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用
接口的静态方法的定义格式:
public static 返回值类型 方法名称(参数列表){
方法体
}
注意:
一个类可以实现多个接口,如果多个接口中有重名的静态方法,如果使用实现类对象调用的方式就区分不开使用的是哪个接口中的静态方法,所以只允许使用接口名.静态方法(参数列表) 使用
jdk8不能用,jdk9以后都可以用
接口的私有方法分类:
私有方法 只有接口中的默认方法可以调用
私有静态方法 接口中的默认方法和静态方法都可以调用。
作用:私有方法只能在本接口中使用,抽取多个默认方法或者静态方法中重复的内容,封装到私有方法中,供默认方法和静态方法去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。
默认方法 通过实现类对象调用进行使用即可
静态方法 只能使用接口名调用
接口的私有方法的定义格式:
private 返回值类型 方法名称(参数列表){
方法体
}
接口的私有静态方法的定义格式:
private static 返回值类型 方法名称(参数列表){
方法体
}