一、接口不能用於建立實例,但接口能夠聲明引用類型變量,而且該引用類型變量必須引用到其實現類的對象。java
二、接口的主要用途:對象
.2.一、定義變量,也可用於進行強制類型轉換blog
.2.二、調用接口中定義的常量繼承
.2.三、被其它類實現接口
三、一個類能夠實現多個接口,也是爲了彌補Java類單繼承靈活性的不足,而進行的補充,類實現接口的語法格式:隊列
[修飾符] class 類名 extends 父類 implements 接口1,接口2...{ 類體部分 }
四、實現接口與繼承父類類似,同樣能夠得到所繼承接口裏的常量(成員變量)、方法(抽象方法、默認方法,不包括類方法),代碼以下:get
interface InterfaceA{ int a=1; void testA(); default void testB(){ System.out.println("接口InterfaceA中的默認方法testB()"); } static void testC(){ System.out.println("接口InterfaceA中的類方法testC()"); } } public class ImplementsTest implements InterfaceA{ public void testA(){ System.out.println("ImplementsTest類實現接口InterfaceA中的testA()方法"); } public void outSper(){ //-以下代碼說明類實現接口,能夠繼承接口的默認方法 testB(); } public static void outStaticSper(){ //-以下代碼編譯報錯,提示找不到方法testC(),說明類實現接口不會繼承接口的類方法 //testC(); //-要調用接口的類方法,必須經過接口來調用 InterfaceA.testC(); } public static void main(String[] args){ System.out.println(new ImplementsTest().a); new ImplementsTest().testA(); new ImplementsTest().outSper(); outStaticSper(); } }
運行結果:編譯
五、一個類實現了一個或多個接口以後,這個類必須徹底實現這些接口裏的全部抽象方法,不然該類將保留從父接口裏繼承來的抽象方法,也就是說該類也必須是抽象類class
六、能夠把實現接口理解爲一種特殊的繼承,至關於實現類繼承了一個完全抽象的類,下面代碼爲實現接口的類:test
import static java.lang.System.*; interface Product{ int getProduceTime(); } interface OutPut{ int MAX_CACHE_LINE=50; void out(); void getData(String mes); default void print(String...mesg){ for(String str:mesg){ out.println(str); } } default void test(){ out.println("接口OutPut的默認方法test()!"); } static String staticTest(){ return "接口OutPut的類方法staticTest()!"; } } public class Printer implements Product,OutPut{ private String[] printData = new String[MAX_CACHE_LINE]; private int dataNum=0; public int getProduceTime(){ return 45; } public void out(){ while(dataNum>0){ out.println("打印機打印:"+printData[0]); arraycopy(printData,1,printData,0,--dataNum); } } public void getData(String mes){ if(dataNum>=MAX_CACHE_LINE){ out.println("輸出隊列已滿,添加失敗!"); }else{ printData[dataNum++]=mes; } } public static void main(String[] args){ Printer p = new Printer(); p.getData("個人!"); p.getData("你的!"); p.out(); p.getData("他的!"); p.getData("你們的!"); p.out(); p.print("個人","你的","他的","你們的"); p.test(); out.println(p.getProduceTime()); //-父接口的靜態方法,只能經過父接口來調用 out.println(OutPut.staticTest()); } }
運行效果:
注:
一、實現接口的方法時必須用 public 修飾,由於接口裏的方法都是 public 修飾的,而子類重寫父類的方法時,訪問權限只能是更大或相等,因此實現接口裏的方法時必須用 public 修飾