1. default和static關鍵字
a. default 用在接口中, 爲該接口的實現類的方法. --> 不能通過接口直接調用.
static 也是用在接口中, 同Class中的static方法一樣, 是類級別的方法, 而不是對象的方法. --> 可以通過接口直接調用.
b. 一個接口可以有多個default方法, 也可以有多個static方法.
2. default 在使用中的注意事項
如下面的例子,
有兩個接口, InterA和InterB, 都有一個方法, 爲defaultFunction(),
ClassA僅僅爲InterA的實現類. 那麼沒有報錯. 當調用ClassA的defaultFunction()時, 會自動調取InterA的方法.
但是ClassAB同時爲InterA和InterB的實現類. 當調用ClassAB的defaultFunction()時, 不知道該調取哪個接口的了, 所以, ClassAB需要自己重寫這個方法.
3. Static則和default不同,
打印結果
4. 源碼
public class DefaultDemoApp {
public static void main(String[] args) {
new ClassA().defaultFunction();
new ClassAB().defaultFunction();
}
}
interface InterA {
default void defaultFunction() {
System.out.println("This is A defaultFunction");
}
static void staticFunction() {
System.out.println("This is A status function");
}
}
interface InterB {
default void defaultFunction() {
System.out.println("This is B defaultFunction");
}
static void staticFunction() {
System.out.println("This is B status function");
}
}
class ClassA implements InterA {
}
class ClassAB implements InterA, InterB {
@Override
public void defaultFunction() {
InterB.staticFunction();
}
}