以下情況可以通過編譯
Class A { static void staticMethod() { println(); } } Class B extends A { } B.staticMethod();
而以下情況則不可以
interface A { static void staticMethod() { println(); } } Class B implements A { } B.staticMethod();
這里會提示錯誤
static method may be invoked on containing interface class only.
這是因為
在Java 8中,在接口中添加靜態方法帶來了一個限制 :這些方法不能由實現它的類繼承。
這樣做是有道理的,因為一個類可以實現多個接口。如果2個接口具有相同的靜態方法,它們都將被繼承,編譯器就不知道要調用哪個接口。