java接口介紹、接口中的(常量、抽象方法、默認方法、靜態方法、私有方法)、接口與接口間的多繼承

目錄

接口介紹

不同版本的接口

列:創建不同版本中新增接口

接口中的常量

列:接口中的常量練習

接口中的默認方法

列:默認方法與抽象方法練習

接口中的靜態方法

列:實現接口中的靜態方法

接口中的私有方法

列:接口中普通私有方法的使用

列:接口中靜態私有方法的使用

接口與接口之間的繼承

列:接口與接口之間多繼承的練習


接口介紹

:內部封裝了成員變量、構造方法和成員方法

接口Java語言中一種引用類型,是方法的集合

注意:

  • 接口是沒有靜態代碼塊或者構造方法的。
  •  一個類的直接父類是唯一的,但是一個類可以同時實現多個接口。
  • 接口不能創建對象,只能用接口的實現類創建對象
  • 接口中的抽象方法在接口實現類中全部實現
  •  如果實現類所實現的多個接口當中,存在重複的抽象方法,那麼只需要覆蓋重寫一次即可。
  •  如果實現類沒有覆蓋重寫所有接口當中的所有抽象方法,那麼實現類就必須是一個抽象類。
  •  如果實現類在實現的多個接口當中,存在重複的默認方法,那麼實現類一定要對沖突的默認方法進行覆蓋重寫。
  •  一個類如果繼承父類當中的方法,和接口當中的默認方法產生了衝突,優先用父類當中的方法。

定義接口格式

public interface 接口名稱 {
 // 抽象方法 
 // 默認方法
 // 靜態方法 
 // 私有方法 
}

不同版本的接口

如果是Java 7,那麼接口中可以包含的內容有:
1. 常量
2. 抽象方法

如果是Java 8,還可以額外包含有:
3. 默認方法
4. 靜態方法

如果是Java 9,還可以額外包含有:
5. 私有方法

列:創建不同版本中新增接口

java 7中新增抽象方法

public interface InterFaceName {
 public abstract void method(); 
}

java 8中新增默認方法和靜態方法

public interface InterFaceName {
    public default void method() {//默認方法
        // 執行語句 
    }
    public static void method2() {//靜態方法
        // 執行語句 }
    }
}

java 9中新增私有方法

public interface InterFaceName{
  private void method(){
   //執行語句
  }
}

接口中的常量

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

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

注意事項:
1. 接口當中的常量,可以省略public static final,注意:不寫也照樣是這樣。
2. 接口當中的常量,必須進行賦值;不能不賦值。
3. 接口中常量的名稱,使用完全大寫的字母,用下劃線進行分隔。(推薦命名規則)

列:接口中的常量練習

public interface MyInterfaceConst {
    // 這其實就是一個常量,一旦賦值,不可以修改
    public static final int NUM_OF_MY_CLASS = 12;
}

測試

    public static void main(String[] args) {
        // 訪問接口當中的常量
        System.out.println(MyInterfaceConst.NUM_OF_MY_CLASS);
    }

接口中的默認方法

1. 接口的默認方法,可以通過接口實現類對象,直接調用。
2. 接口的默認方法,也可以被接口實現類進行覆蓋重寫。

列:默認方法與抽象方法練習

創建接口

public interface MyInterfaceDefault {
    // 抽象方法
    public abstract void methodAbs();
    // 抽象方法
    //  public abstract void methodAbs2();
    // 默認方法
    public default void methodDefault() {
        System.out.println("這是新添加的默認方法");
    }
}

接口實現類

  接口中的抽象方法必須全部實現,默認方法可以不實現

MyInterfaceDefaultA與MyInterfaceDefaultB

public class MyInterfaceDefaultA implements MyInterfaceDefault {
    @Override
    public void methodAbs() {
        System.out.println("我實現了接口中的抽象方法");
    }
}
public class MyInterfaceDefaultB implements MyInterfaceDefault {
    @Override
    public void methodAbs() {
        System.out.println("實現了抽象方法,BBB");
    }

    @Override
    public void methodDefault() {
        System.out.println("實現類B覆蓋重寫了接口的默認方法");
    }
}

測試

當對象使用接口的默認方法時,如果實現類中沒有默認方法,會向上找默認方法

    public static void main(String[] args) {
        // 創建了實現類對象
        MyInterfaceDefaultA a = new MyInterfaceDefaultA();
        a.methodAbs(); // 調用抽象方法,實際運行的是右側實現類。
        a.methodDefault(); // 調用默認方法,如果實現類當中沒有,會向上找接口
        System.out.println("==========");

        MyInterfaceDefaultB b = new MyInterfaceDefaultB();
        b.methodAbs();//b類抽象方法
        b.methodDefault(); // 實現類B覆蓋重寫了接口的默認方法
    }

結果:

接口中的靜態方法

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

注意事項:不能通過接口實現類的對象來調用接口當中的靜態方法。正確用法:通過接口名稱,直接調用其中的靜態方法。
格式:

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

列:實現接口中的靜態方法

創建接口

public interface MyInterfaceStatic {
    public static void methodStatic() {
        System.out.println("這是接口的靜態方法!");
    }
}

創建接口實現類

public class MyInterfaceStaticImpl implements MyInterfaceStatic {
}

測試

    public static void main(String[] args) {
        // 創建了實現類對象
        MyInterfaceStaticImpl impl = new MyInterfaceStaticImpl();
        // 錯誤寫法!
//        impl.methodStatic();

         MyInterfaceStatic.methodStatic();// 直接通過接口名稱調用靜態方法
    }

結果:

接口中的私有方法

從Java 9開始,接口當中允許定義私有方法。

普通私有方法格式:解決多個默認方法之間重複代碼問題

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

靜態私有方法:解決多個靜態方法之間重複代碼問題

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

列:接口中普通私有方法的使用

接口

public interface MyInterfacePrivateA {
    //默認方法
    public default void methodDefault1() {
        System.out.println("默認方法1");
        methodCommon();
    }

    public default void methodDefault2() {
        System.out.println("默認方法2");
        methodCommon();
    }
    //普通私有方法
    private void methodCommon() {
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }
}

接口實現類

public class MyInterfacePrivateAImpl implements MyInterfacePrivateA {
    public void methodAnother() {
        // 直接訪問到了接口中的普通私有方法,這樣是錯誤的!
//        methodCommon();
    }
}

列:接口中靜態私有方法的使用

接口

public interface MyInterfacePrivateB {
   //接口中靜態方法
    public static void methodStatic1() {
        System.out.println("靜態方法1");
        methodStaticCommon();
    }

    public static void methodStatic2() {
        System.out.println("靜態方法2");
        methodStaticCommon();
    }
  //接口中靜態私有方法
    private static void methodStaticCommon() {
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }

}

 測試

public static void main(String[] args) {
    MyInterfacePrivateB.methodStatic1();
    MyInterfacePrivateB.methodStatic2();
    // 錯誤寫法!
//        MyInterfacePrivateB.methodStaticCommon();
}

結果

接口與接口之間的繼承

類與類之間是單繼承,接口與接口之間是多繼承

列:接口與接口之間多繼承的練習

父類接口

public interface MyInterfaceA {
    public abstract void methodA();
    public abstract void methodCommon();
    public default void methodDefault() {
        System.out.println("AAA");
    }
}

父類接口

public interface MyInterfaceB {
    public abstract void methodB();
    public abstract void methodCommon();
    public default void methodDefault() {
        System.out.println("BBB");
    }
}

子類接口

子類接口繼承兩個父類接口,當父類接口中的默認方法重複時,子類接口必須重寫此重複的方法

public interface MyInterface extends MyInterfaceA, MyInterfaceB {
    public abstract void method();
    //子類接口重寫了父類接口中重複的方法
    @Override
    public default void methodDefault() {
    }
}

 

接口實現類

  如果實現類所實現的多個接口當中,存在重複的抽象方法,那麼必須覆蓋重寫一次即可

public class MyInterfaceImpl implements MyInterface {
    //子類接口抽象方法
    @Override
    public void method() {

    }
    //父類A接口抽象方法
    @Override
    public void methodA() {

    }
    //父類B接口抽象方法
    @Override
    public void methodB() {
    }
   // 父類A與父類B接口的重複的抽象方法
    //如果實現類所實現的多個接口當中,存在重複的抽象方法,那麼必須覆蓋重寫一次即可
    @Override
    public void methodCommon() {

    }
}

 

 

 

 

 

 

 

 

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