Java 8 中静态方法和缺省方法之间的区别:
1) 默认方法可以在实现类时重写,而静态方法不能。
2) 静态方法只属于接口类,所以你只能在接口类上调用静态方法,不能在实现这个接口的类上调用静态方法,参见:
public interface MyInterface {
default void defaultMethod(){
System.out.println("Default");
}
static void staticMethod(){
System.out.println("Static");
}
}
public class MyClass implements MyInterface {
public static void main(String[] args) {
MyClass.staticMethod(); //not valid - static method may be invoked on containing interface class only
MyInterface.staticMethod(); //valid
}
}
3)类和接口都可以有同名的静态方法,并且都不能重写其他方法!
public class MyClass implements MyInterface {
public static void main(String[] args) {
//both are valid and have different behaviour
MyClass.staticMethod();
MyInterface.staticMethod();
}
static void staticMethod(){
System.out.println("another static..");
}
}