java 介面定義
1.1概述
介面,是java語言中一種引用型別,是方法的集合,如果說類的內部封裝了成員變數、構造方法和成員方法,那麼介面的內部主要就是封裝了方法,
包含抽象方法(JDK7及以前),預設方法和靜態方法(JDK8)。
介面的定義,它與定義類方式相似,但是使用 interface關鍵字。它也會被編譯成.class檔案,但一定要明確它並不是類,而是另外一種引用資料型別。
public class類名 類名.java-->.class
public interface介面名 介面名.java-->.class
引用資料型別:陣列,類,介面。
介面的使用,它不能建立物件,但是可以被實現(implements ,類似於被繼承)。
一個實現介面的類(可以看做是介面的子類),需要實現介面中所有的抽象方法,建立該類物件,就可以呼叫方法了,否則它必須是一個抽象類。
1.2格式:
public interface 介面名稱{ //抽象方法 //預設方法 //靜態方法 }
抽象方法:使用abstract 關鍵字修飾,可以省略,沒有方法體。該方法供子類實現使用。
public abstract void method();===> void method();
預設方法:使用default修飾,不可省略,供子類呼叫或者子類重寫。
public default void method(){
//執行語名
}
靜態方法:使用static修飾,供介面直接呼叫。
public static void method(){
//執行語名
}
1.3實現
類與介面的關係為實現關係,即類實現介面,該類可以稱為介面的實現類,也可以稱為介面的子類,實現的動作類似繼承,格式
相仿,只是關鍵字不同,實現使用implements關鍵字。
非抽象子類實現介面:
1,必須重寫介面中所有抽象方法。
2,繼承了介面的預設方法,即可以直接呼叫,也可以重寫。
格式
class 類名 implements 介面名{ //重寫介面中抽象方法[必須] //重寫介面中預設方法[可選] }
預設方法的使用:可以繼承 ,可以重寫,二選一,但是隻能通過實現類的物件來呼叫。
靜態方法的使用:靜態與.class檔案相關,只能使用介面名呼叫,不可以通過實現類的類名或得實現類的物件呼叫
測試介面
public interface Animail{ public static void run(){ System.out.println("run..") } }
測試(實現)類
public class Cat implements Animail{ //無法重寫靜態方法 }
測試類
public class InterfaceDemo{ public static void main(String[] args){ // Cat c=new Cat(); // c.run(); //或 Cat.run(); 【 錯誤】無法繼承方法,也無法呼叫 Animal.run(); } }
成員變數
介面中,無法定義成員變數,但是可以定義常量,其值是不可以改變,預設使用public static final修飾 。
public interface Demo{ int NUM=10;//必須賦值 ,可以省去預設修飾符public static final public static final int NUM2=100; }
1.4介面的多實現
一個類可以實現多個介面,這叫做介面的多實現。並且,一個類能繼承一個父類,同時實現多個介面。
class 類名 [extends 父類名] implements 介面1,介面2,介面3....{ //重寫介面中抽象方法[必須] //重寫介面中預設方法[不重名時可選] }
抽象方法
介面中,有多個抽象方法時,實現類必須重寫所有抽象方法。如果抽象方法有重名的,只需要重寫一次。
1.5介面的多繼承
一個介面能繼承另一個或者多個介面,這和類之前的繼承比較相似。介面的繼承使用 extends關鍵字,子介面繼承
父介面的方法。如果父介面中的預設方法重名的,那麼子介面需要重寫一次。
1.6抽象類和介面比較
相同點:
都位於繼承的頂端,用於被其他類實現或繼承;
都不能直接例項化物件;
都包含抽象方法,其子類都必須複寫這些抽象方法;
區別:
抽象類為部分方法提供實現,避免子類重複實現這些方法,提高程式碼重用性;
介面只能包含抽象方法;
一個類只能繼承一個直接父類(可能是抽象類),卻可以實現多個介面;(介面彌補了java的單繼承)
抽象類為繼承體系中的共性內容;
介面為繼承體系中的擴充套件功能
a,成員區別
抽象類:變數,常量;有構造方法;有抽象方法;也有非抽象方法
介面:常量;抽象方法
b,關係
類與類:繼承,單繼承
類與介面:實現,可以單實現,也可以多實現
介面與介面:繼承,單繼承,多繼承
c,設計區別
抽象類:對類抽象,包括屬性、行為
介面:對行為抽象,主要是行為