正如您所知,在Java 8中,接口可以使用静态方法,这些方法本身就具有实现。
正如我在相关教程中所读到的,实现此类接口的类可以使用其静态方法。但是,我有一个问题,在这里,我用一个更简单的例子来展示它
public interface Interface1{
public static void printName(){
System.out.println("Interface1");
}
}
当我实现这样的界面时
public class Class1 implements Interface1{
public void doSomeThing() {
printName();
}
}
我遇到编译错误。
The method printName() is undefined for the type Class1
问题是什么?
答案 0 :(得分:24)
From the Java Language Specification,
C类从其直接超类继承所有具体方法m (超静态和实例)所有的超类 以下是真实的:
- [...]
C类继承自其直接超类和直接 对所有抽象和默认(§9.4)方法m进行超级接口 以下所有都是真的:
- [...]
类不会从其超接口继承静态方法。
因此该方法不会被继承。
您可以静态导入成员
import static com.example.Interface1.printName;
...
printName();
或将其与完全限定类型名称一起使用
com.example.Interface1.printName();
或导入printName
所属的类型,并使用其短名称
import static com.example.Interface1;
...
Interface1.printName();