jdk 1.8新特性--接口增强
接口中的属性默认有:static final 修饰符修饰;
定义的方法默认是抽象方法;在jdk1.8中可以写默认方法和静态方法;
一、默认方法
允许在接口中提供方法的默认实现,这样实现类就不必实现这些方法,除非需要自定义行为。这一特性通过在方法前加上 default
关键字来实现。
定义语法:
interface InterfaceName{ default returnType methodName(arg-list){ }}
默认的访问修饰符是public
interface A{default void test(){System.out.println("Default Method test in A");}
}
两大优势:
-
可以让接口更优雅的的升级,减少使用人员操作的负担;
不必随着接口方法的实现,从而修改实现代码,因为默认方法在子类用可以不用实现;
-
可以让实现类中省略很多不必要的方法的空实现;
接口继承与默认方法的冲突:
例如:一个类C,实现两个接口A、B,其中接口B继承接口A
interface A{default void test(){System.out.println("A");}
}interface B extends A{default void test(){System.out.println("B..");}
}class C implements A,B{public static void main(String[] args) {C c=new C();c.test();}
}//运行结果:
B..
方法调用的判断规则:
- 类中声明的方法优先级最高:类或父类中声明的方法要高于任何默认方法的优先级;
- 如果无法根据第一条进行判断,那么子接口的优先级更高;例如:B接口继承了A接口,那么B接口就比A接口更具体,优先级更高;
- 最后,- 还是无法判断,那么继承了多个接口的类,必须通过重写方法来确定方法的调用;
二、静态方法
静态方法属于接口本身,而不是实现类。静态方法可以直接通过接口名调用。
interface InterfaceName{static returnType methodName(arg-list){//代码实现}
}// 访问
InterfaceName.methodName();
注意,接口中的静态方法,只能使用当前接口的名字来调用
三、私有方法
从Java 9开始,接口中还可以定义私有方法。
- 私有方法可以用于重用代码,避免重复实现逻辑。
- 私有方法只能在接口内部被调用,不能被实现类或其他外部类访问。
public interface MyInterface {private void privateMethod() {System.out.println("This is a private method.");}default void usePrivateMethod() {privateMethod();}
}