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