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源文件里定义了一个接口,则该源文件里的主文件名必须与该接口名相同。