java8改进的接口:
抽象类是从多个类中抽象出来的模板,如果将这种抽象进行更彻底,可以提炼出来一种更加特殊的“抽象类”–接口,接口里不能包含普通方法,接口里的所有方法都是抽象方法,java8对接口进行了改进,允许在接口中定义默认方法,默认方法可以定义方法实现。

——————————————————————————————————————————————————————
java8中接口的定义:
和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。

[修饰符] interface 接口名 extends 父接口1,父接口2..
{
0个到多个常量定义
0个到多个抽象方法定义
0个到多个内部类,接口,枚举定义
0个到多个默认方法或者类定义
}

(1)修饰符可以是public或者省略,如果省略,则默认采用包权限访问控制符,即只有在相同包结构下才能访问该接口。
(2)一个接口只能有多个直接父接口,但接口只能继承接口,不能继承类。
(3)由于接口定义的是一种规范,因此接口不能包含构造器和初始化定义
(4)接口里可以包含成员变量(只能是静态常量)、方法(只能是抽象方法)、内部类(内部接口,枚举)定义。
(5)在接口中定义成员变量时,不管是否使用 public static final 修饰,接口里的成员变量总是使用这三个修饰符来修饰。
(6)接口里没有构造器和初始化块,因此接口里定义的成员变量只能在定义时指定默认值。
下面两种方式结果完全一样:
//系统自动为接口里定义的成员变量增加 public static final
int MAX_SIZE=50;
public static final int MAX_SIZE=50;

public interface Output
{
    //接口里定义的成员变量只能是常量
    int MAX_CACHE_LINE=50;
    //接口里定义的方法只能是public 的抽象方法
    void out();
    void getData(String msg);
    //在接口里定义默认方法,需要使用default修饰
    default void print(String ...msg)
    {
        for(String msg:msg)
        {
            System.out.println(msg);
        }
    }
//在接口里定义默认方法,需要使用default修饰
  default  void test()
    {
      System.out.println("默认的test()方法");

  }
  //在接口中定义类方法,需要使用static修饰
  static String StaticTest()
    {
      return "接口里的类方法";
  }

}

(1)java8允许在接口中定义默认方法,默认方法必须使用default修饰,不能用static修饰。
(2)java8允许在接口中定义类方法,类方法必须使用static修饰,该方法不能使用default修饰。
(3)一个java源文件里最多只能有一个public接口,如果一个java源文件里定义了一个接口,则该源文件里的主文件名必须与该接口名相同。