2016-02-27 78 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類,它完全由在各種收集接口上運行的靜態方法組成。

添加的靜態方法的接口允許程序員與接口的定義一起保存相關的功能,使代碼更容易理解和維護。