1. 程式人生 > 實用技巧 >java 介面定義

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,設計區別

抽象類:對類抽象,包括屬性、行為

介面:對行為抽象,主要是行為