原文鏈接:https://liushiming.cn/2020/02/23/java-static-methods/
概述
Java8帶來了一些全新的特性,包括lambda表達式、函數接口、方法引用、流、可選方法、接口中的靜態方法和默認方法。
在本文中,我們將深入討論為什么java8接口新增了默認方法,如何使用默認方法,並討論一些有用的用例。
靜態方法
接口中的靜態方法和類中定義的靜態方法一樣,不屬於特定對象,所以它們不是實現接口的api的一部分,必須使用InterfaceName.staticMethod來調用它們。
為了理解靜態方法如何在接口中工作,讓我們看一個實例:
interface NewInterface {
// 靜態方法
static void hello()
{
System.out.println("Hello, New Static Method Here");
}
// 抽象方法
void overrideMethod(String str);
}
// 實現類
public class InterfaceDemo implements NewInterface {
public static void main(String[] args)
{
InterfaceDemo interfaceDemo = new InterfaceDemo();
// 調用接口靜態方法
NewInterface.hello();
// 調用被覆寫后抽象方法
interfaceDemo.overrideMethod("Hello, Override Method here");
}
// 實現接口方法
@Override
public void overrideMethod(String str)
{
System.out.println(str);
為什么接口要支持靜態方法
接口中的靜態方法背后的思想是提供一種簡單的機制,允許通過將相關的方法內聚在接口中,而不必創建新的對象。
抽象類也可以做同樣的事情。主要的區別在於抽象類可以有構造函數、成員變量和方法。
推薦把和只和接口相關的靜態utility方法放在接口中(提高內聚性),而不需要額外創建一些utility類專門去放置這些方法。
參考資料
Baeldung - Static and Default Methods in Interfaces in Java
geeksforgeeks - Static method in Interface in Java