jdk8中的接口新特性

Java 8用默认方法与静态方法这两个新概念来扩展接口的声明。默认方法与抽象方法不同之处在于抽象方法必须要求实现,但是默认方法则没有这个要求,就是接口可以有实现方法,而且不需要实现类去实现这个方法。我们只需在接口中的方法名前面加个default关键字表明这个方法是默认方法。为什么要有这个特性?以前当需要修改接口的时候,需要修改全部实现该接口的类。而引进的默认方法的目的是为了解决接口的修改与现有的实现不兼容的问题。

默认方法语法格式如下:

public interface Vehicle {
default void print(){
System.out.println(“我是一辆车!”);

}
}
当出现这样的情况,一个类实现了多个接口,且这些接口有相同的默认方法,这种情况的解决方法:
1.是创建自己的默认方法,来覆盖重写接口的默认方法
2.可以使用 super 来调用指定接口的默认方法-----接口名.super.方法名();
Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法。在JVM中,默认方法的实现是非常高效的,并且通过字节码指令为方法调用提供了支持。默认方法允许继续使用现有的Java接口,而同时能够保障正常的编译过程。尽管默认方法非常强大,但是在使用默认方法时我们需要小心注意一个地方:在声明一个默认方法前,请仔细思考是不是真的有必要使用默认方法,因为默认方法会带给程序歧义,并且在复杂的继承体系中容易产生编译错误。

注:
实现类中不用重写接口中的默认方法,当然,但有需要的话可以去重写。(通过实现类对象可以调用默认方法)

接口中定义的静态方法只能通过接口来调用,不能用实现类或实现类对象来调用。(在设计的时候就是只想让接口自身使用,不想让实现类使用)

如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的方法,那么子类在没有重写这个方法的情况下,默认调用父类中的同名同参的方法---->类优先原则(这里仅针对方法而言)

如果实现类实现的多个接口中声明了同名同参的方法,那么子类在没有重写这个方法的情况下,要么重写这个方法,要么通过 接口名.super.方法名() 来调用特定的接口中的同名同参的方法。

上一篇:高性能PHP框架thinkphp5.0.0 Beta发布-为API开发而设计


下一篇:JDK8新特性关于Stream流