2016-02-27 77 views
0

我学习Java界面,我发现一个很奇怪......静态方法 - Java的

给定一个接口:

public interface Worker { 

    public void doWork(); 
    static void aTestStatic() { 
     System.out.println("I can be called within the Interface!"); 
    } 


public class Main { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

    Worker.aTestStatic(); 
} 

它的实际工作:

I can be called within the Interface! 

为什么?我认为,在接口内只能声明方法而不实现,而不是类,它们不能被调用,但只能实现。

在此先感谢。

+4

您使用的是Java 1.8吗? https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html –

回答

3

由于this article解释,

一个用Java 8最大的设计改变的是与接口的概念。在Java 7之前,我们只能在接口中使用方法声明。但是来自Java 8的,我们可以在接口中使用默认方法和静态方法。

但需要注意的是静态方法可见的接口方法只不能被覆写。在某些情况下,如提供实用程序方法(例如,使用Java 8,我们可以将整个Collections.XX方法移动到集合接口中)很有帮助。

1

这是Java 8的一个相对较新的特性,它允许您在接口中编写静态实现。

在此之前的Java 8个程序员被迫限定有用于它们的界面,例如静态方法的类Collections类,它完全由在各种收集接口上运行的静态方法组成。

添加的静态方法的接口允许程序员与接口的定义一起保存相关的功能,使代码更容易理解和维护。