网站推广产品哪个网站免费建站最好
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{@Overridepublic 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{@Overridepublic void method1() {}@Overridepublic void method2() {}@Overridepublic void method3() {}@Overridepublic void method4() {}@Overridepublic void method5() {}@Overridepublic void method6() {}@Overridepublic void method7() {}@Overridepublic void method8() {}@Overridepublic void method9() {}@Overridepublic void method10() {}
}
实现类:
//让真正的实现类继承中间类,并重写需要用的方法
public class interImpl extends interAdapter{@Overridepublic void method5() {System.out.println("method5");}
}