由于子類不能繼承父類的構(gòu)造方法挨下,因此熔恢,要調(diào)用父類的構(gòu)造方法,必須在子類的構(gòu)造方法體的第一行使用 super() 方法臭笆。該方法會(huì)調(diào)用父類相應(yīng)的構(gòu)造方法來(lái)完成子類對(duì)象的初始化工作叙淌。
在以下情況下需要使用 super 關(guān)鍵字:
- 在類的構(gòu)造方法中,通過(guò) super 語(yǔ)句調(diào)用該類的父類的構(gòu)造方法愁铺。
- 在子類中訪問(wèn)父類中的成員鹰霍。
定義接口
接口(英文:Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型茵乱,是抽象方法的集合茂洒,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式瓶竭,從而來(lái)繼承接口的抽象方法督勺。
接口并不是類,編寫(xiě)接口的方式和類很相似斤贰,但是它們屬于不同的概念智哀。類描述對(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ì)象谷朝。
接口與類相似點(diǎn):
- 一個(gè)接口可以有多個(gè)方法。
- 接口文件保存在 .java 結(jié)尾的文件中武花,文件名使用接口名圆凰。
- 接口的字節(jié)碼文件保存在 .class 結(jié)尾的文件中。
- 接口相應(yīng)的字節(jié)碼文件必須在與包名稱相匹配的目錄結(jié)構(gòu)中体箕。
接口與類的區(qū)別:
- 接口不能用于實(shí)例化對(duì)象专钉。
- 接口沒(méi)有構(gòu)造方法挑童。
- 接口中所有的方法必須是抽象方法。
- 接口不能包含成員變量跃须,除了 static 和 final 變量站叼。
- 接口不是被類繼承了,而是要被類實(shí)現(xiàn)菇民。
- 接口支持多繼承尽楔。
接口特性
- 接口中每一個(gè)方法也是隱式抽象的,接口中的方法會(huì)被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會(huì)報(bào)錯(cuò))第练。
- 接口中可以含有變量翔试,但是接口中的變量會(huì)被隱式的指定為 public static final 變量(并且只能是 public,用 private 修飾會(huì)報(bào)編譯錯(cuò)誤)复旬。
- 接口中的方法是不能在接口中實(shí)現(xiàn)的垦缅,只能由實(shí)現(xiàn)接口的類來(lái)實(shí)現(xiàn)接口中的方法。
抽象類和接口的區(qū)別
- 抽象類中的方法可以有方法體驹碍,就是能實(shí)現(xiàn)方法的具體功能壁涎,但是接口中的方法不行。
- 抽象類中的成員變量可以是各種類型的志秃,而接口中的成員變量只能是 public static final 類型的怔球。
- 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法浮还。
- 一個(gè)類只能繼承一個(gè)抽象類竟坛,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
實(shí)例
Animal.java 文件代碼:
/* 文件名 : Animal.java */
interface Animal {
public void eat();
public void travel();
}
接口的實(shí)現(xiàn)
當(dāng)類實(shí)現(xiàn)接口的時(shí)候钧舌,類要實(shí)現(xiàn)接口中所有的方法担汤。否則,類必須聲明為抽象的類洼冻。
類使用implements關(guān)鍵字實(shí)現(xiàn)接口崭歧。在類聲明中,Implements關(guān)鍵字放在class聲明后面撞牢。
實(shí)現(xiàn)一個(gè)接口的語(yǔ)法率碾,可以使用這個(gè)公式:
MammalInt.java 文件代碼:
/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{
public void eat(){
System.out.println("Mammal eats");
}
public void travel(){
System.out.println("Mammal travels");
}
public int noOfLegs(){
return 0;
}
public static void main(String args[]){
MammalInt m = new MammalInt();
m.eat();
m.travel();
}
}