一、基礎概念
(一)接口可以簡單的理解為,是一個特殊的抽象類,該抽象類中的方法都是抽象的。
接口中的成員有兩種:1.全局常量 2.抽象方法
定義接口用關鍵字interface,接口中的成員都用固定的修飾符public來修飾。
(二)接口的特點:
1、接口不可以實例化。
2、接口的子類必須覆蓋接口中的所有抽象方法后,才可以實例化。否則該子類是抽象類。
3、接口是用來被實現的。
(三)接口解決的問題:
1.因為多繼承調用的不確定性,java中是不直接支持多繼承的,但可以通過接口來解決,將多繼承轉換成多實現。
2.因為子類具備所屬的父類體系的基本功能后,還想擴展一些其他功能。可以通過接口來完成。
3.避免單繼承的局限性。一個類繼承另一個類的同時,還可以實現多個接口。
(四)接口的思想:
1.接口的出現擴展了功能。
2.接口的出現其實就是暴露出來的規則。
3.接口的出現降低了耦合性。(用於解耦)
4.接口的出現,一方在使用接口,一方在實現接口。
(五)類與接口的區別:
1.類與類之間的關系是繼承關系。
2.類與接口之間的關系是實現關系。
3.接口與接口的關系是繼承關系,而且可以多繼承。
4.抽象類中可以定義抽象和非抽象方法。子類可以直接使用,或者覆蓋使用。接口中定義都是抽象方法,必須實現后才能使用。
5.類用於描述是事物的共性基本功能,接口用於定義的是事物的額外功能。
二、實例代碼(一)
1.定義接口子類SubInter_1,進行接口InterA的實現
2.定義接口子類SubInter_2,進行接口InterA接口和InterB的多實現
3.定義接口子類SubInter_3,繼承Fu類還進行接口InterA的實現
3.定義接口子類SubInter_4,繼承Fu類還進行接口InterA和InterB的多實現
1 //定義父類Fu 2 class Fu 3 { 4 public void show1() 5 { 6 System.out.println("Fu show1 ......"); 7 } 8 } 9 10 //定義接口InterA 11 interface InterA 12 { 13 public static final int num1 = 4; //全局常量 14 public abstract void show2(); //抽象方法 15 } 16 17 //定義接口InterB 18 interface InterB 19 { 20 public static final int num2 = 6; 21 public abstract void show3(); 22 } 23 24 //定義接口子類SubInter_1,進行實現 25 class SubInter_1 implements InterA//子類SubInter1實現 InterA接口 26 { 27 public void show2() 28 { 29 System.out.println("SubInter_1 InterA show2 ......"); 30 } 31 } 32 33 //定義接口的子類SubInter_2,進行多實現 34 class SubInter_2 implements InterA,InterB//用子類SubInter2 多實現 InterA接口和Inter接口 35 { 36 public void show2() 37 { 38 System.out.println("SubInter_2 InterA show2 ......"); 39 } 40 public void show3() 41 { 42 System.out.println("SubInter_2 InterB show3 ......"); 43 } 44 } 45 46 47 //SubInter_3類繼承了Fu類的基本功能,還實現了InterA接口的基本功能。 48 class SubInter_3 extends Fu implements InterA 49 { 50 public void show2() 51 { 52 System.out.println("SubInter_3 InterA show2 ......"); 53 } 54 55 } 56 57 //SubInter_4類繼承了Fu類的基本功能,還實現了InterA接口和InterB接口的基本功能。 58 class SubInter_4 extends Fu implements InterA,InterB 59 { 60 public void show2() 61 { 62 System.out.println("SubInter_3 InterA show2 ......"); 63 } 64 65 public void show3() 66 { 67 System.out.println("SubInter_3 InterB show3 ......"); 68 } 69 } 70 71 class InterfaceDemo1 72 { 73 public static void main(String[] args) 74 { 75 //SubInter_1實例化 s1 76 SubInter_1 s1 = new SubInter_1(); 77 System.out.println(s1.num1); 78 System.out.println(SubInter_1.num1); 79 s1.show2(); 80 81 //SubInter_2實例化 s2 82 SubInter_2 s2 = new SubInter_2(); 83 System.out.println(s2.num1); 84 System.out.println(s2.num2); 85 System.out.println(SubInter_2.num1); 86 s2.show2(); 87 s2.show3(); 88 89 //SubInter_3實例化 s3 90 SubInter_3 s3 = new SubInter_3(); 91 System.out.println(s3.num1); 92 System.out.println(SubInter_3.num1); 93 s3.show1(); 94 s3.show2(); 95 96 //SubInter_4實例化 s4 97 SubInter_4 s4 = new SubInter_4(); 98 System.out.println(s4.num1); 99 System.out.println(s4.num2); 100 System.out.println(SubInter_4.num2); 101 s4.show1(); 102 s4.show2(); 103 s4.show3(); 104 } 105 }
代碼執行
三、實例代碼(二)
1.定義接口InterB,繼承接口InterA。並實現InterB
2.定義接口InterD,繼承接口InterB和接口InterC.並實現InterD
1 //定義接口InterA 2 interface InterA 3 { 4 public static final int num = 4; 5 public abstract void show1(); 6 } 7 8 //定義接口InterB,繼承接口InterA 9 interface InterB extends InterA 10 { 11 public abstract void show2(); 12 } 13 14 //定義接口InterC 15 interface InterC 16 { 17 public abstract void show3(); 18 } 19 20 //定義接口InterD,繼承接口InterB和接口InterC 21 interface InterD extends InterB,InterC 22 { 23 public abstract void show4(); 24 } 25 26 //定義接口子類SubInter,進行實現 27 class SubInter_1 implements InterB 28 { 29 public void show1() 30 { 31 System.out.println("SubInter_1 InterA show1 ......"); 32 } 33 34 public void show2() 35 { 36 System.out.println("SubInter_1 InterB show2 ......"); 37 } 38 } 39 40 //定義接口子類SubInter,進行實現 41 class SubInter_2 implements InterD 42 { 43 public void show1() 44 { 45 System.out.println("SubInter_2 InterA show1 ......"); 46 } 47 48 public void show2() 49 { 50 System.out.println("SubInter_2 InterB show2 ......"); 51 } 52 53 public void show3() 54 { 55 System.out.println("SubInter_2 InterC show3 ......"); 56 } 57 58 public void show4() 59 { 60 System.out.println("SubInter_2 InterD show4 ......"); 61 } 62 } 63 64 class InterfaceDemo2 65 { 66 public static void main(String[] args) 67 { 68 69 //SubInter_1實例化s1 70 SubInter_1 s1 = new SubInter_1(); 71 System.out.println(s1.num); 72 s1.show1(); 73 s1.show2(); 74 75 //SubInter_2實例化s2 76 SubInter_2 s2 = new SubInter_2(); 77 System.out.println(s1.num); 78 s2.show1(); 79 s2.show2(); 80 s2.show3(); 81 s2.show4(); 82 } 83 }
代碼執行
四、實例代碼(三)
接口Inter中有4個方法,子類只想用其中的一個方法。
用DemoA類實現接口Inter中的所有方法進行解決。
1 interface Inter 2 { 3 public abstract void show1(); 4 public abstract void show2(); 5 public abstract void show3(); 6 public abstract void show4(); 7 } 8 9 //為了方便創建Inter接口的子類對象,先創建一個DemoA類實現接口Inter。 10 //因為Demo類創建對象沒有意義。所以將該類抽象。 11 abstract class DemoA implements Inter 12 { 13 public void show1(){} 14 public void show2(){} 15 public void show3(){} 16 public void show4(){} 17 } 18 19 class DemoB extends DemoA 20 { 21 public void show1() 22 { 23 System.out.println("Inter show1 ......"); 24 } 25 } 26 27 class InterfaceDemo3 28 { 29 public static void main(String[] args) 30 { 31 DemoB s1 = new DemoB(); 32 s1.show1(); 33 } 34 }
代碼運行