hos*_*yni 18 java inheritance static-methods interface java-8
正如您所知,在Java 8中,接口可以拥有静态方法,这些方法本身就具有实现.
正如我在相关教程中所读到的,实现此类接口的类可以使用其静态方法.但是,我有一个问题,在这里,我用一个比我更简单的例子来展示它
public interface Interface1{
public static void printName(){
System.out.println("Interface1");
}
}
Run Code Online (Sandbox Code Playgroud)
当我实现这样的接口
public class Class1 implements Interface1{
public void doSomeThing() {
printName();
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到编译错误.
The method printName() is undefined for the type Class1
Run Code Online (Sandbox Code Playgroud)
有什么问题?
Sot*_*lis 24
类C从其直接超类继承超类的所有具体方法m(静态和实例),以下所有条件都为真:
- [...]
类C继承自其直接超类和直接超接口所有抽象和默认(§9.4)方法m,其中所有以下都是真的:
- [...]
类不会从其超接口继承静态方法.
所以该方法不是继承的.
您可以静态导入该成员
import static com.example.Interface1.printName;
...
printName();
Run Code Online (Sandbox Code Playgroud)
或者使用完全限定的类型名称
com.example.Interface1.printName();
Run Code Online (Sandbox Code Playgroud)
或者导入printName属于的类型并使用其短名称调用它
import static com.example.Interface1;
...
Interface1.printName();
Run Code Online (Sandbox Code Playgroud)