接口内的静态方法 - Java

时间:2016-02-27 12:44:20

标签: java methods interface

我正在学习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!

为什么呢?我认为在Interfaces中只能声明没有实现的方法,而不是一个类,它们不能被调用但只能实现。

提前致谢。

2 个答案:

答案 0 :(得分:3)

正如this article所解释的那样,

  

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

但请注意,静态方法仅对接口方法可见无法覆盖。在某些情况下,它很有用,比如提供实用程序方法(例如,使用Java 8,我们可以在集合接口中移动整个Collections.XX方法)。

答案 1 :(得分:1)

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

在Java 8之前,程序员被迫为其接口定义一个带有静态方法的类,例如Collections类,它完全由在各种集合接口上运行的静态方法组成。

向接口添加静态方法允许程序员将相关功能与接口定义结合在一起,使代码更易于理解和维护。