2017-06-08 67 views
-1

是什麼在Java 8這個代碼之間的區別:Java靜態方法VS功能

此:

public class Hello { 
    public static void sayHello() { 
     System.out.println("ghasedak.Hello !!!"); 
    } 
} 

這:

public interface Hello { 
    public static void sayHello() { 
     System.out.println("ghasedak.Hello !!!"); 
    } 
} 

這是主類:

public class MainClass { 
    public static void main(String[] args) { 
      Hello.sayHello(); //for function 
      Hello.sayHello(); //for class 
    } 
} 
+1

確定,即Java允許在接口方法的實現? –

+1

你的第二個實現根本不會編譯。 –

+0

區別在於一個方法在一個類中,另一個方法在一個接口中。類/接口基本上只是一種名稱空間,方法可以訪問該名稱空間內的任何內容(即其他靜態方法或字段)。 – Thomas

回答

0

在Java 8中,您現在可以defi ne接口中的方法。所以技術上他們是一樣的。與接口的區別仍然是你不能實例化它們。所以你只能使用它們中的方法。

這裏是鏈接:https://en.wikipedia.org/wiki/Interface_(Java)

這充分說明了接口如何在Java 8

現在交互。在你的代碼,它仍然應該叫Hello類方法在接口類方法,因爲正如我所說的接口不能實例化。

0

這兩者之間沒有區別。

第一個示例顯示了在類中實現的靜態方法,而第二個示例顯示了在接口中實現的靜態方法。如果您使用JDK 7或更低版​​本,第二個示例不會編譯,因爲正如其他人已經說過的那樣,接口中的靜態方法支持僅在Java 8中添加。Here是一個非常有用的StackOverflow文章,它解釋了爲什麼支持靜態方法和默認方法在接口中添加了Java 8。

您是否希望將靜態方法(可能是實用程序方法)保留在類或接口中,這取決於具體情況。例如。如果你想添加一個新的通用方法到一組沒有擴展公共基類但實現了通用接口的類中。由於沒有公共基類,因此可以將常用方法添加到接口中。

0

我覺得我們有兩個區別:
1)接口只能有一個函數。
2)重要:接口不是類,所以沒有阻止靜態:當你調用類

public class Hello { 
    static { 
     System.out.println("Ok"); 
    } 
    public static void sayHello() { 
     System.out.println("ghasedak.Hello !!!"); 
    } 
} 

此塊運行:
鑑於此代碼。
你不能在功能接口上做到這一點。 (intefaces沒有這個塊)
抱歉壞英語