在Java語(yǔ)言中,接口由類來(lái)實(shí)現(xiàn),以便使用接口中的方法。一個(gè)類需要在類聲明中使用關(guān)鍵字implements聲明該類實(shí)現(xiàn)一個(gè)或多個(gè)接口。如果實(shí)現(xiàn)多個(gè)按口,用逗號(hào)隔開接口名。
例如:
class A implements Printable,Addable //A類實(shí)現(xiàn)Printable和Addable接口 class Dog extends Animal implements Eatable,Sleepable //Animal的Dog子類實(shí)現(xiàn)Eatable和Sleepable接口
如果一個(gè)非抽象類實(shí)現(xiàn)了某個(gè)接口,那么這個(gè)類必須重寫這個(gè)接口中的所有方法。
注意:由于接口中的方法一定是public abstract方法,所以類在重寫接口方法時(shí)不僅要去掉abstract修飾符,還要給出方法體,而且方法的訪問(wèn)權(quán)限一定要明顯地用public來(lái)修飾。
如果實(shí)現(xiàn)接口的非抽象類實(shí)現(xiàn)了該接口中的方法,就相當(dāng)于給出了方法的具體行為功能。用戶也可以自定義接口,一個(gè)Java源文件可以由類和接口組成。
如果一個(gè)類聲明實(shí)現(xiàn)一個(gè)接口,但沒(méi)有重寫接口中的所有方法,那么這個(gè)類必須是抽象類,也就是說(shuō),抽象類既可以重寫接口中的方法,也可以直接擁有接口中的方法。
細(xì)節(jié)說(shuō)明:
程序可以用接口名訪問(wèn)接口中的常量,但是如果一個(gè)類實(shí)現(xiàn)了接口,那么該類可以直接在類體中使用該接口中的常量。
定義接口時(shí),如果關(guān)鍵字interface前面加上public關(guān)鍵字,就稱作public接口,public接口可以被任何一個(gè)類實(shí)現(xiàn);如果不加上public關(guān)鍵字,就稱作友好接口,友好接口可以被與該接口在同一包中的類實(shí)現(xiàn)。
如果父類實(shí)現(xiàn)了某個(gè)接口,那么子類也就自然而然地實(shí)現(xiàn)了該接口,也就是說(shuō),子類不必再使用關(guān)鍵字implements聲明實(shí)現(xiàn)這個(gè)接口。
接口也是可以被繼承的,即可以通過(guò)關(guān)鍵字extends聲明一個(gè)接口是另一個(gè)接口的子接口。由于接口中的方法和常量都是共有的,所以子接口將繼承父接口中的全部方法和常量。
注意:Java提供的接口都在相應(yīng)的包中,通過(guò)import語(yǔ)句不僅可以引入包中的類,也可以引入包中的接口。
例如:
import java.io.*; //此時(shí)不僅引入了java.io包中的類,還引入了該包中的接口
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程