首頁(yè) > 專(zhuān)家說(shuō)

給講講java接口的概念!

來(lái)源:新能源網(wǎng)
時(shí)間:2024-08-17 13:31:42
熱度:

給講講java接口的概念!【專(zhuān)家解說(shuō)】:接口可以看成是特殊的抽象類(lèi)。即只包含抽象方法和常量的抽象類(lèi)??梢酝ㄟ^(guò)interface關(guān)鍵字來(lái)定義接口。看如下代碼:interface Ru

【專(zhuān)家解說(shuō)】:接口可以看成是特殊的抽象類(lèi)。即只包含抽象方法和常量的抽象類(lèi)??梢酝ㄟ^(guò)interface關(guān)鍵字來(lái)定義接口。看如下代碼:
interface Runner {
public static int DEFAULT_SPEED = 100;
public void run();
}
注意,run()方法,此處可以省略public abstract。因其默認(rèn)就是public abstract的。

實(shí)現(xiàn)接口
與繼承不同,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,實(shí)現(xiàn)的接口直接用逗號(hào)分隔。當(dāng)然,該類(lèi)需要實(shí)現(xiàn)這些接口中定義的所有方法;
一個(gè)類(lèi)可以通過(guò)implements關(guān)鍵字”實(shí)現(xiàn)”接口。一個(gè)類(lèi)實(shí)現(xiàn)了某個(gè)接口后必須實(shí)現(xiàn)該接口中定義的所有方法??聪旅娴拇a,類(lèi)實(shí)現(xiàn)了接口并實(shí)現(xiàn)了方法:
class AmericanCurl implements Runner , … {
public void run() {
System.out.println("run...");
}
}
另外需要說(shuō)明的一點(diǎn),接口可以作為一種類(lèi)型聲明變量,一個(gè)接口類(lèi)型的變量可以引用實(shí)現(xiàn)了該接口的類(lèi)的對(duì)象;通過(guò)該變量可以調(diào)用該接口中定義的方法(具體的實(shí)現(xiàn)類(lèi)提供了方法的實(shí)現(xiàn))。代碼如下所示:
Runner runner = new AmericanCurl();

此句代碼為,一個(gè)接口類(lèi)型變量,引用了子類(lèi)的對(duì)象。調(diào)用時(shí),調(diào)用的是子類(lèi)對(duì)象的具體的實(shí)現(xiàn)。

接口的繼承
接口間可以存在繼承關(guān)系,一個(gè)接口可以通過(guò)extends關(guān)鍵字繼承另外一個(gè)接口。子接口繼承了父接口中定義的所有方法。代碼如下所示:
interface Runner {
public void run();
}
interface Hunter extends Runner {
public void hunt();
}
class AmericanCurl implements Hunter {
public void run() {… … …}
public void hunt() {… … …}
}
說(shuō)明:AmericanCurl實(shí)現(xiàn)了Hunter,必須實(shí)現(xiàn)Hunter接口中的hunt方法以及其父接口Runner中的run方法。

接口和抽象類(lèi)的區(qū)別
一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但可以實(shí)現(xiàn)多個(gè)接口。

抽象類(lèi)中可以包含抽象方法和非抽象方法,而接口中的所有方法均為抽象的。
子類(lèi)繼承抽象類(lèi)必須實(shí)現(xiàn)抽象類(lèi)中所有抽象方法,否則子類(lèi)也必須是抽象類(lèi)。而子類(lèi)實(shí)現(xiàn)接口則必須實(shí)現(xiàn)接口中的所有抽象方法。