一接口定义
[修饰符]interface 接口名 extends 父接口1,父接口2…
{
零个到多个常量定义…
零个到多个抽象方法定义…
零个到多个内部类,接口,枚举定义…
零个到多个默认方法或类方法定义…
}
二接口应用
1 Output接口
package cakin24;
public interface Output
{
// 接口里定义的成员变量只能是常量
int MAX_CACHE_LINE = 50;
// 接口里定义的普通方法只能是public的抽象方法
void out();
void getData(String msg);
// 在接口中定义默认方法,需要使用default修饰
default void print(String... msgs)
{
for (String msg : msgs)
{
System.out.println(msg);
}
}
// 在接口中定义默认方法,需要使用default修饰
default void test()
{
System.out.println("默认的test()方法");
}
// 在接口中定义类方法,需要使用static修饰
static String staticTest()
{
return "接口里的类方法";
}
}
2 OutputFieldTest类
package cakin;
public class OutputFieldTest
{
public static void main(String[] args)
{
// 访问另一个包中的Output接口的MAX_CACHE_LINE
System.out.println(cakin24.Output.MAX_CACHE_LINE);
// 下面语句将引起"为final变量赋值"的编译异常
// lee.Output.MAX_CACHE_LINE = 20;
// 使用接口来调用类方法
System.out.println(cakin24.Output.staticTest());
}
}
3 运行结果
50
接口里的类方法
4 代码分析
4.1 上面定义了一个Output接口,这个接口包含一个成员变量:MAX_CACHE_LINE。除此之外,还定义了两个普通方法:表示取得数据的getData方法和表示输出的out方法。
4.2 Java 8中允许在接口中定义默认方法,默认方法必须使用default修饰,该方法不能使用static修饰。
4.3 Java 8中允许在接口中定义类方法,类方法必须使用static修饰,该方法不能使用default修饰,无论程序是否指定,类方法总是使用public修饰。类方法可以直接使用接口来调用。
4.4 接口里的成员变量默认是使用public static finaI修饰,因此即使另一类处于不同包下,也可以通过接口来访问接口里的成员变量。