Java 默认方法 静态方法
Java 8使用两个新概念扩展了接口的含义:默认方法和静态方法
默认方法使得开发者可以在不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。
为什么要有这个特性?

首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8 之前的集合框架没有 forEach 方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。

一、接口默认方法的定义

  1. public interface InterfaceMethod {
  2. default String getValue() {
  3. return "接口默认方法使用关键字default定义";
  4. }
  5. }

二、接口静态方法的定义

  1. public interface InterfaceMethod {
  2. public static String getName() {
  3. return "接口静态方法使用关键字static定义";
  4. }
  5. }

三、接口默认方法的“类优先”原则

若一个接口中定义了一个默认方法,而另外一个父类接口或接口中又定义了一个同名的方法时。

  • 选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
  • 接口冲突。如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须实现该方法来解决冲突。