2019-10-25-23:22:23 目錄 1.介面的概念 2.介面的定義格式 3.介面包含的內容 4.介面的使用步驟 5.繼承父類並實現多個介面 6.介面之間的多繼承 介面的概念 介面是指對協定進行定義的引用類型。其他類型實現介面,以保證它們支持某些操作。介面指定必須由類提供的成員或實現它的其他 ...
2019-10-25-23:22:23
目錄
1.介面的概念
2.介面的定義格式
3.介面包含的內容
4.介面的使用步驟
5.繼承父類並實現多個介面
6.介面之間的多繼承
介面的概念
介面是指對協定進行定義的引用類型。其他類型實現介面,以保證它們支持某些操作。介面指定必須由類提供的成員或實現它的其他介面。與類相似,介面可以包含方法、屬性、索引器和事件作為成員,其中最終喲啊的內容就是其家中的抽象方法
介面的定義格式
public interface 介面名稱{
介面內容
}
介面包含的內容
1.常量
1 package demopra.Interface;
2 //定義一個介面
3 public interface InterfaceContent01 {
4 //介面包含的內容(常量)
5 double PI = 3.141592654;
6 }
2.抽象方法
1 package demopra.Interface;
2 //定義一個介面
3 public interface InterfaceContent02 {
4 //介面包含的內容(抽象方法)
5 public abstract void method();//(public abstract兩個關鍵字可以省略)
6 }
3.預設方法
1.備註:介面當中的預設方法可以解決介面升級的問題
2.介面的預設方法可以通過介面實現類對象進行直接調用
3.介面的預設方法可以被介面的實現類進行覆蓋重寫
1 package demopra.Interface;
2 /*
3 格式:
4 public default 返回值類型 方法名稱(參數列表){
5 方法體
6 }
7 */
8 //定義一個介面
9 public interface InterfaceContent03 {
10 //介面包含的內容(預設方法)
11 public default void method03(){
12 System.out.println("這是一個預設方法");
13 }
14 }
1 package demopra.Interface;
2
3 public class InterfaceContentt03Test implements InterfaceContent03{
4 public static void main(String[] args) {
5 //創建實現類對象
6 InterfaceContentt03Test ic = new InterfaceContentt03Test();
7 //實現類對象直接調用介面的預設方法
8 ic.method03();
9 }
10 // //實現類覆蓋重寫介面的預設方法
11 // @Override
12 // public void method03() {
13 // System.out.println("實現類覆蓋重寫介面的預設方法");
14 // }
15 }
4.靜態方法
1 package demopra.Interface;
2 /*
3 格式:
4 public static 返回值類型 方法名稱(){
5 方法體
6 }
7 提示:就是將abstract或者default換成static 即可,記得帶上方法體{}
8 註意事項:不能通過介面實現類對象來調用介面當中的靜態方法,只能通過介面名稱來調用
9 格式:
10 介面名稱.靜態方法(參數);
11 */
12 //定義一個介面
13 public interface InterfaceContent04 {
14 //介面包含的內容(靜態方法)
15 public static void method04(){
16 System.out.println("這是一個靜態方法");
17 }
18 }
1 package demopra.Interface;
2 //創建一個介面的實現類
3 public class InterfaceContentt04Test implements InterfaceContent04{
4 public static void main(String[] args) {
5 //創建一個實現類對象
6 InterfaceContentt04Test ic = new InterfaceContentt04Test();
7 //錯誤寫法,會報錯
8 // ic.method04();
9
10 //正確調用方法
11 InterfaceContent04.method04();//執行結果:這是一個靜態方法
12 }
13 }
5.私有方法
1 package demopra.Interface;
2 /*
3 為什麼要用私有方法:
4 我們需要抽取一個共有方法,用來解決兩個預設方法之間重覆代碼的問題。
5 但是這個共有方法不應該讓實現類使用,應該是私有化的。
6 私有方法的兩種用法:
7 普通私有方法:解決多個預設方法之間代碼重覆問題
8 格式:
9 private 返回值類型 方法名稱(參數列表){
10 方法體
11 }
12 靜態私有方法:解決多個靜態方法之間代碼重覆問題
13 格式:
14 private static 返回值類型 方法名稱(){
15 方法體
16 }
17 */
18 //定義一個介面
19 public interface InterfaceContent05 {
20 //介面包含的內容(私有方法)
21 public static void method0501(){
22 System.out.println("這是一個普通私有方法1");
23 method05();
24 }
25
26 public static void method0502(){
27 System.out.println("這是一個普通私有方法2");
28 method05();
29 }
30 //定義一個普通私有方法
31 private static void method05(){
32 System.out.println("AAAA");
33 System.out.println("BBBB");
34 }
35 //靜態私有方法同理
36 }
1 package demopra.Interface;
2
3 public class InterfaceContentt05Test {
4 public static void main(String[] args) {
5 //直接通過介面名調用
6 InterfaceContent05.method0501();
7 InterfaceContent05.method0502();
8 //錯誤的寫法,private不能直接調用
9 // InterfaceContent05.method05();
10 }
11 //靜態私有方法同理
12
13 /*
14 結果:
15 這是一個普通私有方法1
16 AAAA
17 BBBB
18 這是一個普通私有方法2
19 AAAA
20 BBBB
21 */
22 }
介面的使用步驟
1.介面不能直接使用,逆序有一個"實現類了"來"實現"該介面
格式:
public class 實現類名稱 implements 介面名稱{
實現類內容
}
2.介面的實現必須覆蓋實現介面中所有的抽象方法
實現:去掉abstract關鍵字,加上方法體大括弧
3.創建實現類對象,進行使用
備註:如果實現類並沒有覆蓋重寫介面中所有的實現方法,那麼這個實現類自己必須是抽象類
繼承父類並實現多個介面
使用介面的時候,需要註意:
1.介面是沒有靜態代碼塊或者構造方法的。
2.一個類的直接父類是唯一的,但是一個類可以同時實現多個介面。
格式,
public class MyInterfaceImpl impl ements MyInterfaceA, MyInterfaceB {
//覆蓋重寫所有抽象方法
}
3.如果實現類所實現的多個介面當中,存在重覆的抽象方法,那麼只需要覆蓋重寫一次即可。
4.如果實現類沒有覆蓋重寫所有介面當中的所有抽象方法,那麼實現類就必須是一個抽象類。
5.如果實現類鎖實現的多個介面當中,存在重覆的預設方法,那麼實現類一定要對衝突的預設方法進行覆蓋重寫。
6.一個類如果直接父類當中的方法,和介面當中的預設方法產生了衝突,優先用父類當中的方法。
介面之間的多繼承
1.類與類之間是單繼承的.直接父類只有一個。
2.類與介面之間是多實現的。一個類可以實現多個按口。
3.介面與介面之間是多繼承的。
註意事項
1多個父介面當中的抽象方法如果重覆,沒關係。
2.多個父介面當中的預設方法如果重覆,那麼子介面必須進行預設方法的覆蓋重寫, [而且帶著default關鍵字]