接口interface

接口

接口可以理解爲一種更爲抽象的抽象類,是抽象類的一種特殊形式,抽象類中可以定義不是抽象方法的一般方法(有方法體的方法),可以讓子類直接繼承使用,而接口中只能定義抽象方法,不能有一般方法,只能創建子類子類實例化使用。

接口的定義

接口也是一種特殊的類,但是接口的定義關鍵字不是class,需要用interface(接口)關鍵字來定義

定義格式:

public interface 接口名{

         抽象方法1

         抽象方法2

         抽象方法3

         ……

}

接口中的抽象方法也是有固定的定義格式的:

public abstract 返回值類型 方法名(參數列表);

接口方法的修飾符必須爲public,如果不寫默認也是public,不是default

接口的成員變量的定義也是有要求的:

public static final(最終的) 數據類型 變量名 = ;

接口中定義的成員變量全部都是常量,定義後就不可改變。

類實現接口

類與類之間是繼承的關係,子類繼承了父類,類與接口之間就不是繼承關係了,而是實現關係,類實現了接口,這個類可以看成是子類,準確來說應該是實現類。

定義了接口,就需要定義另一個類去實現這個接口,重寫接口的方法,需要用到一個關鍵字implements(實現)去實現接口,用一段代碼來演示接口的實現:

l  接口類

package cn.itcast.intreface接口;
/*
 * 定義接口
 * 定義成員變量和抽象方法
 */
public interface Interface {
   //定義成員變量,其實在接口中定義的變量都是常量
   //int a = 1;
   //寫全之後是這種格式
   public static final int a = 1;
   //定義抽象方法,用於實現類的方法重寫
   public abstract void fuction(); 
}


l  實現接口類

package cn.itcast.intreface接口;
/*
 * 實現類,實現接口
 * 重寫接口的方法
 */
public class ImplementsInterface implements Interface{
   //重寫接口方法
   public void fuction(){
      System.out.println("類重寫了接口中的方法");
   }
}


l  測試類

package cn.itcast.intreface接口;
/*
 * 測試類;測試接口的實現
 */
public class Test {
   public static void main(String[] args) {
      //創建實現接口類ImplementsInterface的對象
      ImplementsInterface imp = new ImplementsInterface();
      imp.fuction();
   }
}


接口中成員的特點

1、成員變量的特點:其實在接口中該變量已經不是變量了,而是常量,它的值是不可以被改變的。

成員變量的定義格式(固定)public static final 數據類型 變量名 = ;

public      權限最大

static      static修飾的成員都可以通過類名點直接調用該成員

final         最終的,被它修飾的成員不可被修改

注意:這三個修飾符可寫可不寫,它都是默認存在的。

2、成員方法的特點:

抽象方法的格式(固定):public abstract 返回值類型 方法名();

接口中方法的public abstract 修飾符也是可寫可不寫,都是默認存在的。

注意:接口中的抽象方法,在實現類中必須全部進行重寫。

接口的多實現

java中是不允許多繼承的,但是可以允許接口的多實現,定義兩個接口,實現類繼承兩個接口,這是允許的,但是必須要將兩個接口中的抽象方法全部進行重寫。如下:

//接口A

public interface A{

         public abstract void a();

}

//接口B

public interface B{

         public abstract void b();

}

//實現類C,進行多實現,重寫接口中的所有方法

public class C implements A,B{

         public void a(){}

         public void b(){}

}

類繼承類實現多接口

一個類可以繼承一個父類同時實現多個接口,如下:

//接口A

public interface A{

         public abstract void a();

}

//接口B

public interface B{

         public abstract void b();

}

//父類D

public class D{

         public void d(){}

}

//實現類C,進行多實現,重寫接口中的所有方法

public class C extends D implements A,B{

         public void a(){}

         public void b(){}

         public void d(){}

}

接口中的多繼承

java中類之間是不能有多繼承的,但是接口之間可以進行多繼承,如下:

//接口A

public interface A{

         public abstract void a();

}

//接口B

public interface B{

         public abstract void b();

}

/*

接口C,繼承接口A,B

重寫接口中所有的方法

*/

public interface C entends A,B{

         public void a(){}

         public void b(){}

}

接口的好處

1、 增強了擴展性

2、 藉口就是暴露出來的規則

3、 接口降低了耦合性

接口和抽象類的區別

相同點:

1、 都屬於繼承的頂端被其他類繼承或者實現

2、 都需要重寫其父類和接口的方法

3、 接口和抽象類都不能實例化對象,需要子類重寫方法創建子類對象進行實現

區別:

1、 抽象類可以重寫一部分方法,其他方法可以直接繼承使用,接口必須重寫所有的方法

2、 一個類只能繼承一個直接父類,但是接口可以實現多個,解決了單繼承的問題

3、 抽象類是這個事物應該具備的功能,接口是這個事物可以具備的額外功能

二者優先考慮接口的使用,需要爲子類提供共性的內容選擇抽象類


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章