11.6. Java 8新特性默认方法和静态方法

在Java 8之前,尽管Java语言中接口已经非常优秀了,但相比其他面向对象的语言而言Java接口存在如下不足之处:

  1. 不能可选实现方法,接口的方法全部是抽象的,实现接口时必须全部实现接口中方法,哪怕是有些方法并不需要,也必须实现。
  2. 没有静态方法

代码示例

InterfaceA.java

package DefaultFangFa;

/*
 * 在接口InterfaceA中声明了两个抽象方法methodA和methodB,两个默认方法methodC和methodD,还有
声明了静态方法methodE,
接口中的默认方法类似于类中具体方法,给出了具体实现,只是方法修饰符是default。接口中静态方法类似于类中静态方法
 */

public interface InterfaceA {
 void methodA();

 String methodB();

// 默认方法
 default int methodC() {
  return 0;
 }

// 默认方法
 default String methodD() {
  return "这是默认方法....";
 }

// 静态方法
 static double methodE() {
  return 0.0;
 }
}

ABC.java

package DefaultFangFa;

public class ABC implements InterfaceA{
 @Override
 public void methodA() {
  // TODO 自动生成的方法存根

 }

 @Override
 public String methodB() {
  // TODO 自动生成的方法存根
  return "实现methodB方法......";
 }

 @Override
 public int methodC() {
  // TODO 自动生成的方法存根
  return 500;
 }
}

调用代码

package DefaultFangFa;

public class HelloWorld {
public static void main(String[] args) {
 //声明接口类型,对象是实现类,发生多态
 InterfaceA abc = new ABC();

 // 访问实现类methodB方法
 System.out.println(abc.methodB());

 // 访问默认方法methodC
 System.out.println(abc.methodC());

 // 访问默认方法methodD
 System.out.println(abc.methodD());

 // 访问InterfaceA静态方法methodE
 System.out.println(InterfaceA.methodE());
}
}

/*
实现methodB方法......
500
这是默认方法....
0.0
*/