为什么我不能使用已实现接口的静态方法?

时间:2014-12-14 16:22:13

标签: java inheritance interface java-8 static-methods

正如您所知,在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

问题是什么?

1 个答案:

答案 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();