Java——接口扩展
JDK8开始接口中新增的方法
JDK7以前:接口中只能定义抽象方法。
JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态)
JDK9的新特性:接口中可以定义私有方法。
默认方法
需要使用关键字default修饰
作用:
解决接口升级的问题
接口中默认方法的定义格式:
格式: public default 返回值类型方法名(参数列表){}
范例: public default void show () { }
接口中默认方法的注意事项:
1.默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候重写的方法去掉default关键字
2.public可以省略,default不能省略
3.如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写,因为不重写就不知道调用的是哪个接口中的默认方法
静态方法
需要用static修饰
接口中静态方法的定义格式:
格式: public static 返回值类型方法名(参数列表){}
范例: public static void show () { }
接口中静态方法的注意事项:
1.静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
2.public可以省略,static不能省略3.静态方法在子类(实现类)中不能被重写,但是可以定义重名的方法,分别用接口名和子类类名调用,例如:
接口:
public interface inter {
public abstract void method();
public static void show(){
System.out.println("接口静态方法————show方法");
}
}
实现类
public class interimpl implements inter{
@Override
public void method() {
System.out.println("重写method方法");
}
//不叫重写,子类把从父类继承下来的虚方法表里的方法覆盖了才叫重写
public static void show(){
System.out.println("接口实现类————show方法");
}
}
测试类
public class test {
public static void main(String[] args) {
//调用接口里的show方法
inter.show();
interimpl il = new interimpl();
il.method();
//调用实现类里的show方法
interimpl.show();
}
}
私有方法
接口中私有方法的定义格式:
服务默认方法
格式1: private 返回值类型方法名(参数列表){}
范例1: private void show(){ }
服务静态方法
格式2:private static 返回值类型方法名(参数列表){ }
范例2:private static void method(){ }
作用:
将接口中的几个默认方法(静态方法)中重复部分抽取成一个方法,谁用谁调用,增强代码的复用性,为避免外界调用,所以抽取成的方法定义为私有方法
接口的应用
常规应用
接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了。
进阶应用
当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。
适配器设计模式
介绍
当一个接口中抽象方法过多,但是我只要使用其中一部分的时候,就可以适配器设计模式
书写步骤:
1.编写中间类XXXAdapter,实现对应的接口
2.对接口中的抽象方法进行空实现
3.让真正的实现类继承中间类,并重写需要用的方法
4.为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰
代码举例
接口中定义了10个抽象方法,而实现类只想要使用第五个抽象方法,可以使用适配器
接口:
public interface inter {
public abstract void method1();
public abstract void method2();
public abstract void method3();
public abstract void method4();
public abstract void method5();
public abstract void method6();
public abstract void method7();
public abstract void method8();
public abstract void method9();
public abstract void method10();
}
适配器类(中间类):
//编写中间类XXXAdapter,实现对应的接口
//对接口中的抽象方法进行空实现
//为了避免其他类创建适配器类的对象,中间的适配器类用abstract进行修饰
public abstract class interAdapter implements inter{
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
@Override
public void method4() {
}
@Override
public void method5() {
}
@Override
public void method6() {
}
@Override
public void method7() {
}
@Override
public void method8() {
}
@Override
public void method9() {
}
@Override
public void method10() {
}
}
实现类:
//让真正的实现类继承中间类,并重写需要用的方法
public class interImpl extends interAdapter{
@Override
public void method5() {
System.out.println("method5");
}
}