給講講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)接口中的所有抽象方法。
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)接口中的所有抽象方法。
-
關(guān)于企業(yè)員工消防安全知識(shí)的課件哪里有,還有包括學(xué)校,商場(chǎng),娛樂(lè)場(chǎng)所等人員密集型場(chǎng)所的火場(chǎng)逃生及自救課2024-08-17
-
北京愛(ài)情故事里面的和順古鎮(zhèn),從昆明自駕怎么走?2024-08-17
-
愛(ài)因斯坦的成功故事2024-08-17
-
《與風(fēng)握手的故事】初中閱讀答案2024-08-17
-
科學(xué)家發(fā)明發(fā)現(xiàn)的故事2024-08-17
-
愛(ài)因斯坦的故事2024-08-17
-
科學(xué)家發(fā)明和發(fā)現(xiàn)的故事2024-08-17
-
科學(xué)家發(fā)明故事2024-08-17
-
有關(guān)科學(xué)家發(fā)明發(fā)現(xiàn)的故事2024-08-17
-
有沒(méi)有關(guān)于黃河的歷史人物故事~~急用,,急用2024-08-17
-
有沒(méi)有什么故事能體現(xiàn)出法律是光明和希望的2024-08-17
-
愛(ài)因斯坦成功的故事2024-08-17
-
急急急急,節(jié)能減排,課件制作毛概作業(yè),最好是原創(chuàng),不是也可以啊2024-08-17
-
紅警中的故事發(fā)生在什麼時(shí)代呢2024-08-17
-
紅警中的故事發(fā)生在什麼時(shí)代呢2024-08-17