Java 8 除了给接口带来了 默认方法之外,还给接口带来了 静态方法。而且,Java 8 中的静态方法还可以有具体的实现。
package com.sjh.test.java8.service;
public interface StaticTest1 {
public class InterfaceStaticMethodTester
{
public static void main(String[] args)
{
Greeter.greeter("二哥!");
}
interface Greeter
{
public static void greeter(String name)
{
System.out.println("你好," + name);
}
}
}
}
运行结果:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/...com.sjh.test.java8.service.StaticTest1$InterfaceStaticMethodTester
你好,二哥!
Process finished with exit code 0
但是,Java 8 的接口中的静态方法必须有自己的实现,而不能仅仅是一个接口声明,不然编译是会报错的。
package com.sjh.test.java8.service;
public interface StaticTest1 {
public class InterfaceStaticMethodTester
{
public static void main(String[] args)
{
}
interface Greeter
{
public static void greeter(String name);
}
}
}
编译结果:
Information:java: Errors occurred while compiling module 'test'
Information:javac 1.8.0_171 was used to compile java sources
Information:2020-06-05 10:23 - Build completed with 1 error and 0 warnings in 1 s 769 ms
/Users/sunjiahao/Develop/gitee_project/test/src/com/sjh/test/java8/service/StaticTest1.java
Error:(14, 32) java: 缺少方法主体, 或声明抽象
如果添加了 abstract
关键字,其实,abstract
关键和 static
关键字是不兼容的
package com.sjh.test.java8.service;
public interface StaticTest1 {
public class InterfaceStaticMethodTester
{
public static void main(String[] args)
{
}
interface Greeter
{
public abstract static void greeter(String name);
}
}
}
编译结果:
Information:java: Errors occurred while compiling module 'test'
Information:javac 1.8.0_171 was used to compile java sources
Information:2020-06-05 10:38 - Build completed with 1 error and 0 warnings in 2 s 182 ms
/Users/sunjiahao/Develop/gitee_project/test/src/com/sjh/test/java8/service/StaticTest1.java
Error:(14, 41) java: 非法的修饰符组合: abstract和static
所以,Java 8 支持接口中的静态方法,但静态方法必须有实现,不支持静态方法声明。
end