一接口定义
[修饰符]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修饰,因此即使另一类处于不同包下,也可以通过接口来访问接口里的成员变量。