interface 接口類


接口是一種引用數據類型,最重要的內容就是其中的 抽象方法。

    

定義一個接口格式(普通);

public interface  接口名稱 {

//接口的內容

}

接口名稱 每個單詞首字母都用英文大寫(大駝峰格式),和類名稱是一樣的。 

附加:

如果的Java7, 那么接口中內容包含了

1.常量           2.抽象方法

Java8,        

3.默認方法    4.靜態方法 

Java9,

5.私有方法

 

 

接口的抽象方法定義。

創建一個接口類(父類);

 

 

 1 public interface MyInterfaceAbstract {
 2 
 3 
 4 
 5     public abstract void methodAbs1();
 6     public abstract void methodAbs2();
 7     public abstract void methodAbs3();
 8     public abstract void methodAbs4();
 9     //抽象方法
10     //抽象方法里的public absstract這2個關鍵字可以不寫,但在初學階段不要不寫,以免發生混淆。
11 
12 }

 

 

接口的抽象方法使用:

接口使用步驟;

1,接口不能直接使用,必須有一個“實現類”來“實現”該接口。

格式:
public class 實現類名稱 implements 接口名稱{

   //。。。。

}

 

2,接口實現類必須覆蓋重寫 (實現)接口中所有的抽象方法。

實現:去掉abstract關鍵字,加上方法體大括號。

 

3,創建實現類的對象,進行使用。

   

創建一個實現類(子類);

在實現類名稱后面加上  impl  ,方便查看知道 是某某的實現類。

 1 public class MyInterfaceAbseractImpl implements MyInterfaceAbstract {
 2     @Override
 3     public void methodAbs1() {
 4         System.out.println("這是第一個方法" );
 8     }
 9 
10     @Override
11     public void methodAbs2() {
12         System.out.println("這是第二個方法" );
14     }
15 
16     @Override
17     public void methodAbs3() {
18         System.out.println("這是第三個方法" );
19 
20     }
21 
22     @Override
23     public void methodAbs4() {
24         System.out.println("這是第四個方法" );
25 
26     }
27 }

 

類:

 1 public class Demo01Interface {
 2     public static void main(String[] args) {
 3         //錯誤寫法! 不能直接new接口對象。
 4        // MyInterfaceAbstract inter = new MyInterfaceAbstract();
 5         
 6         //創建實現類的對象使用
 7         MyInterfaceAbseractImpl Impl = new MyInterfaceAbseractImpl();
 8         Impl.methodAbs1();
 9         Impl.methodAbs2();
10         Impl.methodAbs3();
11         Impl.methodAbs4();
12     }
13 }
14    

 

注意事項:
1,如果 實現類並沒有覆蓋重寫接口中所以抽象方法,那么 這個實現類自己就必須是抽象類。、

2,此時 不能new接口對象(父類名稱),要new實現類(子類)

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

接口的默認方法定義

 default(關鍵詞)

1,接口默認方法,可以通過接口實現類對象,直接調用。

2,接口的默認方法,也可以被接口實現類進行覆蓋重寫。

 

從Java8開始,接口允許定義默認方法。

格式;

public default  返回值類型 方法名稱 (參數列表){

         方法體

}

 

接口 父類:

 1 public interface MyInterfaceAbstract {
 2 
 3 
 4 
 5     public abstract void methodAbs1();
 6     public abstract void methodAbs2();
 7     public abstract void methodAbs3();
 8     public abstract void methodAbs4();
 9 
10     //新添加的方法。改成默認方法
11     public default void methodAbs5(){
12         System.out.println("這是新添加的默認方法");
13     }
14 
15 
16 
17 }

 

 

 

 

實現類;

 

1 public class MyInterfaceDefaultImpl implements MyInterfaceDefault {
2 
3     @Override
4     public void methodAbs1() {
5         System.out.println("實現類抽象方法,AAA");
6     }
7 
8  
9 }

 

 

類:

 1 public class Demo02Interface {
 2     public static void main(String[] args) {
 3 
 4 
 5         //創建了實現類對象
 6         MyInterfaceDefaultImpl az = new MyInterfaceDefaultImpl();
 7         az.methodABS();//調用抽象方法,實際運行的是右側實現類。
 8         

//調用默認方法。如果實現類當中沒有的話,會向上找接口。 9 az.methodABS5(); 10 11 } 12 }

 

 

 

 

默認方法有個特殊用法;

接口類(父類)定義好了默認方法,但現實類(子類)沒有定義, 類也可以正常打印調用的,

即使實現類(子類)沒有覆蓋重寫接口類(父類) ,但Java編譯器會往上找的。

還有一點需要補充;

如果接口類(父類)和實現類(子類)都有相同名字的默認方法的話,優先用實現類(子類)的。

 

 

在創建一個實現類,然后在普通類輸出:new上實現類名稱, 實現類名稱 .  (父類方法名稱)();

就能打印出父類的方法體了。

 

 

 

++++++++++++++++++++++++++++++++++++++

接口的靜態方法定義 和使用

從java8開始, 接口當中允許定義靜態方法。

格式;

public static 返回值類型 方法名稱 (參數列表) {

    方法體

}

注意事項:就是將abstract或者default換成static即可,帶上方法體。

正確用法:通過接口名稱,直接調用其中的靜態方法。

格式;

 

 

 

接口類(父類):

1 public interface MyInterfaceStatic {
2 
3     public static void methodStatic(){
4         System.out.println("這是接口的靜態方法!");
5 
6     }
7 
8 }

實現類(子類):{在這種情況下 可以不用創建實現類,直接調用就可以了}

1 public class MyInterfaceStaticImpl implements MyInterfaceStatic{
2     
3 }   
4 
5

 

類(輸出類);

 1 public class DemoInterface {
 2 
 3     public static void main(String[] args) {
 4 
 5         //創建了實現類對象,
 6         //如果在調用父類的靜態方法的話 就是不用創建實現類對象了
 7        MyInterfaceStaticImpl impl= new MyInterfaceStaticImpl();
 8 
 9         //錯誤寫法!
10        // impl.methodStatic();
11         
12         //直接通過接口名稱調用靜態方法    
(父類名稱 . 方法名稱();)
13 MyInterfaceStatic.methodStatic(); 14 15 } 16 }

 注意::靜態 對類(子類)有關系 ,既然這樣 那就不用多余的 new創建類型類了(父類)

直接通過類名稱 調用靜態方法就可以了

++++++++++++++++++++++++++++++++++++++++++++

 

接口私有方法定義和使用。

 

假設:如果是有兩個方法體之間有重復類容太多了,就需要抽取一把。

問題描述;

1,我們需要抽取一個共有方法,用來解決兩個默認方法之間重復代碼的問題。

2,但是z這個共有方法不應該讓實現類使用,應該是私有化的。

 

解決方案:
從Java8 開始,接口當中允許定義私有方法。

1.普通私有方法:解決多個默認方法之間重復代碼問題。

格式;

private  返回值類型 方法名稱(參數列表){

   方法體

}

例子:

接口;

 1 public interface MyInterfaceDefault {
 2 
 3 
 4     public default void method1() {
 5         System.out.println("這是默認方法aaa");
 6         Common();
 7 
 8 
 9     }
10     public default void method2() {
11         System.out.println("這是默認方法bbb");
12         Common();
13 
14     }
15 
16     private void Common(){
17         System.out.println("AAA");
18         System.out.println("BBB");
19         System.out.println("CCC");
20     }
21 
22 
23 
24 }

 

類;

1 public class Demo02Interface {
2     public static void main(String[] args) {
3 
4         MyInterfaceDefaultImpl a = new MyInterfaceDefaultImpl();
5        a. method1();
6        a. method2();
7     }

 

 

 

 

2.靜態私有方法:解決多個靜態方法之間重復代碼問題。

格式;

private static 返回值類型  方法名稱(參數列表){

   方法體

}

 例子;

接口類;

 1 public interface MyInterfaceDefault {
 2 
 3 
 4     public static void method1() {
 5         System.out.println("這是靜態方法aaa");
 6         Common();
 7 
 8 
 9     }
10 
11     public static void method2() {
12         System.out.println("這是靜態方法bbb");
13         Common();
14 
15     }
16 
17     private static void Common() {
18         System.out.println("AAA");
19         System.out.println("BBB");
20         System.out.println("CCC");
21     }
22 
23 
24 }

 類;

1 public class Demo02Interface {
2     public static void main(String[] args) {
3 
4         MyInterfaceDefault.method1();
5         MyInterfaceDefault.method2();
6     }
7 }

 

效果圖;

 

注意事項;私有方法在接口創建后,實現類和類是無法進行其他操作的,它只能在接口特給默認方法和靜態方法使用的。

 

 

 

接口的常量定義和使用。

接口當中也可以定義“成員變量”,但是必須使用public static final三個關鍵字進行修飾。

從效果上看,這其實就是接口的【常量】。

格式;

public static final 數據類型 常量名稱 = 數據值;

備注;

一旦使用final關鍵字進行修飾,說明不可改變。

注意事項;

1,接口當中的常量,可以省略public static final,但注意,不寫它也照樣是這樣。

2,接口當中的常量。必須進行賦值,不能不賦值。

3,接口中常量的名稱,使用完全大寫字母,用下划線進行分割。(推薦命名規則)。

(灰色的字體,可以不寫,但效果照樣可以實現的)考慮到初學,建議 還是寫上,便於理解。

 

例子;

1 public interface MyIntfaceconst {
2     
3     public static final int NUM_OF_MY_CLASS = 10;
4 }

 

1 public class Scout {
2     public static void main(String[] args) {
3 
4         System.out.println(MyIntfaceconst.NUM_OF_MY_CLASS);
5     }
6 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM