java只支持單一繼承,不支持多重繼承,即一個(gè)類只能繼承一個(gè)父類,這一缺陷可以通過接口來彌補(bǔ)。Java允許一個(gè)類實(shí)現(xiàn)多個(gè)接口,這樣使程序更加靈活、易擴(kuò)展。
定義接口
訪問符 interface 接口名[extends 父接口1,父接口2...]
{
//接口體
}
1.一個(gè)接口可以繼承多個(gè)父接口,但接口只能繼承接口,不能繼承類。
2.在接口體里可以包含靜態(tài)常量、抽象方法、內(nèi)部類、內(nèi)部接口以及枚舉的定義, 從java8版本開始允許接口中定義默認(rèn)方法、類方法;
3.與類的默認(rèn)訪問符不同,接口體內(nèi)定義的常量、方法等都默認(rèn)為public,可以 省略public關(guān)鍵字,即當(dāng)接口中定義的常量或方法不寫public,其訪問權(quán)限 依然是public。
4.接口里定義的成員變量只能是常量
5.在接口里定義的普通方法只能是public的抽象方法,即沒有方法體,系統(tǒng)會(huì)自 動(dòng)為其添加public abstract,因?yàn)榻涌诳偸且黄渌悓?shí)現(xiàn)的,所以方法是公 共的。
6.接口中定義默認(rèn)方法,需要使用default修飾,可以有方法體和內(nèi)容
7.在接口中定義類方法,需要使用static修飾,通過接口的名稱調(diào)用類方法
8.接口不能直接實(shí)例化,但可以使用接口聲明引用類型的變量,該變量可以引用 到接口的實(shí)現(xiàn)類的實(shí)例對(duì)象上。接口的主要用途就是被實(shí)現(xiàn)類實(shí)現(xiàn),一個(gè)類 可以實(shí)現(xiàn)一個(gè)或多個(gè)接口,接口之間用逗號(hào)進(jìn)行間隔
9.[訪問符] class類名 implements接口1[,接口2.。。]{實(shí)體}
10.一個(gè)類在實(shí)現(xiàn)一個(gè)或多個(gè)接口是,這個(gè)類必須完成實(shí)現(xiàn)這些接口中定義的所 有抽象方法,否則該類必須定義為抽象類
11.一個(gè)類實(shí)現(xiàn)某個(gè)接口時(shí),該類將會(huì)獲得接口中定義的常量、方法等,因此可 以將實(shí)現(xiàn)接口理解為一種特殊的繼承,相當(dāng)于實(shí)現(xiàn)類繼承了一個(gè)徹底抽象的 類
定義接口:
public interface Myinterface {
//接口里定義的曾遠(yuǎn)變量只能是常量
int MAX_VALU = 50;
//接口里定義的普通方法只能是public的抽象方法
void delMsg();
void addMsg(String msg);
//在接口中定義默認(rèn)方法,需要使用default修飾
default void PRint(String...msgs){
for(String msg:msgs){
System.out.println(msg);
}
}
//在接口中定義類方法,需要使用ststic修飾
static String ststicTest(){
return "在接口里的類方法";
}
實(shí)現(xiàn)接口:
package p2;
public class ImInterfaceDemoimplements Myinterface{
//定義一個(gè)字符串?dāng)?shù)組,長(zhǎng)度是接口中定義的常量MAX—SIZE
private String[] msgs = new String[Myinterface.MAX_VALU];
//記錄消息個(gè)數(shù)
private int num = 0;
//實(shí)現(xiàn)接口中的方法
public void delMsg() {
if(num <= 0 ){
System.out.println("消息隊(duì)列以空,刪除失敗!");
}else{
//刪除消息,num數(shù)量減1
msgs[--num]=null;
}
}
//實(shí)現(xiàn)接口中的方法
public void addMsg(Stringmsg) {
if(num>=Myinterface.MAX_VALU){
System.out.println("消息隊(duì)列已滿,num數(shù)量失敗!");
}else{
//將消息添加到字符串?dāng)?shù)組,num數(shù)量加1
msgs[num++] =msg;
}
}
//定義一個(gè)類實(shí)現(xiàn)自己的方法
public void showMsg(){
//輸出消息隊(duì)列中德信息
for(int i = 0;i <num;i++){
System.out.println(msgs[i]);
}
}
public static void main(String[]args) {
//實(shí)例化一個(gè)接口實(shí)現(xiàn)類的對(duì)象,并將其賦值給一個(gè)接口變量引用
Myinterface mi = new ImInterfaceDemo();
//調(diào)用接口的默認(rèn)方法,默認(rèn)方法必須通過實(shí)例對(duì)象來調(diào)用
mi.print("sda","dasd","da");
//調(diào)用接口的類方法,直接通過“接口名.類方法()”來調(diào)用
System.out.println(Myinterface.ststicTest());
System.out.println("...........");
//實(shí)例化接口實(shí)現(xiàn)類
ImInterfaceDemo ifd = new ImInterfaceDemo();
//添加信息
ifd.addMsg("dasdsd");
ifd.addMsg("dasdsd");
ifd.addMsg("dasdsd");
ifd.addMsg("dasdsd");
//輸出信息
ifd.showMsg();
System.out.println(".............");
//刪除一個(gè)信息
ifd.delMsg();
System.out.println("刪除一個(gè)數(shù)據(jù)后,剩下的信息是:");
ifd.showMsg();
}
}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注