1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
但是,它們都有實(shí)現(xiàn),并且不是“實(shí)例”,因?yàn)閷?shí)現(xiàn)接口的相同類型的兩個(gè)對象沒有位于接口內(nèi)部的實(shí)例變量...因?yàn)榻涌谧兞慷际庆o態(tài)的和最終的。
不,你弄錯(cuò)了。默認(rèn)方法委托給抽象方法。抽象方法在實(shí)現(xiàn)接口的具體類中實(shí)現(xiàn)。具體類非常具有實(shí)例字段。
例:
interface Counter {
void add(int i);
default void increment() {
this.add(1);
}
}
實(shí)現(xiàn)
class ConcreteCounter implements Counter {
private int value = 0;
@Override
public void add(int i) {
this.value += i;
}
}
靜態(tài)方法與類中的靜態(tài)方法一樣,不能調(diào)用實(shí)例方法,而是在接口類本身上調(diào)用,而不是在此接口的實(shí)例上調(diào)用。在上面的示例中,例如,您可以
interface Counter {
static Counter createDefault() {
return new ConcreteCounter();
}
void add(int i);
default void increment() {
this.add(1);
}
}
此靜態(tài)方法不可能作為默認(rèn)方法實(shí)現(xiàn):必須創(chuàng)建計(jì)數(shù)器才能創(chuàng)建計(jì)數(shù)器是沒有意義的。
舉一個(gè)更具體的例子,讓我們以接口的方法為例。它對列表的元素進(jìn)行排序,并且是默認(rèn)方法。它不可能是靜態(tài)方法:靜態(tài)方法不是在 List 的實(shí)例上調(diào)用的,因此它不可能對其元素進(jìn)行排序。sort()List
因此,基本上,接口中默認(rèn)方法和靜態(tài)方法之間的差異與類中的靜態(tài)方法和實(shí)例方法之間的差異相同。
添加回答
舉報(bào)