1.接口的定義
接口(Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法。
接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。除非實(shí)現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。
接口無(wú)法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來(lái)聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對(duì)象。
1.1接口與類相似點(diǎn):
一個(gè)接口可以有多個(gè)方法。
接口文件保存在 .java 結(jié)尾的文件中,文件名使用接口名。
接口的字節(jié)碼文件保存在 .class 結(jié)尾的文件中。
接口相應(yīng)的字節(jié)碼文件必須在與包名稱相匹配的目錄結(jié)構(gòu)中。
1.2接口與類的區(qū)別:
接口不能用于實(shí)例化對(duì)象。
接口沒(méi)有構(gòu)造方法。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量,除了 static 和 final 變量。
接口不是被類繼承,而是被類實(shí)現(xiàn)。
接口支持多繼承。
1.3接口和抽象類的區(qū)別:
抽象類中的方法可以有方法體,就是能實(shí)現(xiàn)方法的具體功能,但是接口中的方法不行。
抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法。
一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
2.接口的聲明
public interface JavaInterface {
public void eat();
}
3.接口的實(shí)現(xiàn)
當(dāng)類實(shí)現(xiàn)接口的時(shí)候,類要實(shí)現(xiàn)接口中所有的方法。否則,類必須聲明為抽象的類。類使用implements關(guān)鍵字實(shí)現(xiàn)接口。在類聲明中,implements關(guān)鍵字放在class聲明后面。
public class JavaInterfaceClass {
public static void main(String[] args) {
DogInterfaceClass dog = new DogInterfaceClass();
dog.eat();
dog.run();
}
}
//實(shí)現(xiàn)了JavaInterface接口的DogInterfaceClass類
class DogInterfaceClass implements JavaInterface
{
@Override
public void eat() {
System.out.println("Dog Eat");
}
public void run() {
System.out.println("Dog Run");
}
}
重寫接口中聲明的方法時(shí),需要注意以下規(guī)則:
類在實(shí)現(xiàn)接口的方法時(shí),不能拋出強(qiáng)制性異常,只能在接口中,或者繼承接口的抽象類中拋出該強(qiáng)制性異常。
類在重寫方法時(shí)要保持一致的方法名,并且應(yīng)該保持相同或者相兼容的返回值類型。
如果實(shí)現(xiàn)接口的類是抽象類,那么就沒(méi)必要實(shí)現(xiàn)該接口的方法。
在實(shí)現(xiàn)接口的時(shí)候,也要注意一些規(guī)則:
一個(gè)類只能繼承一個(gè)類,但是能實(shí)現(xiàn)多個(gè)接口。
一個(gè)接口能繼承另一個(gè)接口,這和類之間的繼承比較相似。
4.接口的繼承
一個(gè)接口能繼承另一個(gè)接口,和類之間的繼承方式比較相似。接口的繼承使用extends關(guān)鍵字,子接口繼承父接口的方法。
public interface JavaInterface {
public void eat();
}
public interface AnimalInterface extends JavaInterface {
public void sport();
}
注意:接口和類不同的是可以多繼承
public interface JavaInterface {
public void eat();
}
public interface AnimalInterface extends JavaInterface {
public void sport();
}
public interface CatInterface extends JavaInterface,AnimalInterface {
public void eatFish();
}
5.標(biāo)記接口
最常用的繼承接口是沒(méi)有包含任何方法的接口。標(biāo)記接口是沒(méi)有任何方法和屬性的接口.它僅僅表明它的類屬于一個(gè)特定的類型,供其他代碼來(lái)測(cè)試允許做一些事情。
標(biāo)記接口作用:簡(jiǎn)單形象的說(shuō)就是給某個(gè)對(duì)象打個(gè)標(biāo)(蓋個(gè)戳),使對(duì)象擁有某個(gè)或某些特權(quán)。
例如:java.awt.event 包中的 MouseListener 接口繼承的 java.util.EventListener 接口定義如下:
package java.util;
public interface EventListener {}