標籤:關鍵字 邏輯 ase 介面 asd 有一個 xtend 設計 png
一.什麼是介面?
介面(Interface),在JAVA程式設計語言中是一個抽象類別型,是抽象方法的集合。介面通常以interface來聲明。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。
二.建立一個介面
建立介面之前我們需要知道介面的一些必要的規則:
1.Java中的介面只支援是public或者是包存取權限,不能是private或者是protected許可權,但是包存取權限的介面在繼承時將會出現只有在本包下的介面才可以繼承,這就容易導致不知名的錯誤,所以推薦將所有的介面都設定為public許可權。
2.介面中的所有方法都是預設public的抽象方法沒有方法體,所以當我們在介面中建立方法是,我們通常不去顯式確認方法是public的。
3.Java中可以設定欄位。但是欄位都是預設為static和final的也就是說都是常量。
4.JavaSE8中增加了一個新特性,在介面中可以放置靜態非抽象方法。
從第四點可以看出我們能在介面中建立一個main方法,並且使其運行。
下面是一個我們自己建立的介面:
package com.cjm.myinterface;public interface MyInterfaceText { int num = 0;// 常量 void f1();//抽象方法 static void f2() { System.out.println("JavaSE8的新特性可以在介面中寫非抽象的靜態方法!"); } }
在介面中建立一個main方法並且使其運行:
public interface MyInterfaceText1 { public static void main(String[] args) { System.out.println("asdas"); }}
結果如下:
三.介面繼承介面
假設現在擁有兩個介面,一個介面想實現另外一個介面的方法,那麼用什麼方法呢?
介面繼承介面,與類實現繼承相同,介面實現介面也是通過extends關鍵字。
代碼如下:
public interface MyInterfaceText2 extends MyInterfaceText, MyInterfaceText1 { // 實現了一個介面繼承了多個介面}
多個介面繼承使用逗號隔開。
那麼子介面將擁有父介面的所有抽象方法。
四.通過介面實現Java的多繼承
c++中允許一個類擁有多個父類(基類),但是Java只允許有一個父類但是可以通過多介面來實現多繼承。(邏輯上來講,Java的確優於c++,人只有一個父親,那麼類也應該這樣才能夠符合這樣的規律,畢竟電腦語言也只不過是現實生活的一個映射)。
同樣這樣做也帶來了極大的好處,它使得子類所需要開闢的資源大大減小了。多個父類,會將所有的父類的資源都載入一遍,其中可能有一些是子類不需要的。
實現介面的類,也必須將介面中的抽象方法實現,同時如果要繼承類還要實現介面,必須將繼承類放在前面,實現介面放在後面。
public class ClassInterface implements MyInterfaceText { @Override public void f1() { // TODO Auto-generated method stub System.out.println("實現介面中的方法!"); } public static void main(String[] args) { MyInterfaceText yf = new ClassInterface(); }}
當我們將一個類實現一個介面時,那我們就可以將子類的執行個體對象向上轉型為介面類型。多態的靈活性正是設計介面的原因。
五.嵌套定義介面
介面可以嵌套定義在介面或者類中。
在類中去嵌套定義一個介面允許介面是private的。
class ClassHasInterface { private interface A {// 使用嵌套定義,介面可以是私人的 void f(); } }
Java中的介面