javaSE筆記-介面

来源:https://www.cnblogs.com/love-xiaowu/archive/2020/04/13/12688944.html
-Advertisement-
Play Games

介面不能創建對象,但是可以被實現(`implements` ,類似於被繼承)。一個實現介面的類(可以看做是介面的子類),需要實現介面中所有的抽象方法,創建該類對象,就可以調用方法了,否則它必須是一個抽象類。 介面:是功能的集合(介面中定義的都是方法) 定義介面使用的也是.java文件;編譯生成的也是 ...


  介面不能創建對象,但是可以被實現(`implements` ,類似於被繼承)。一個實現介面的類(可以看做是介面的子類),需要實現介面中所有的抽象方法,創建該類對象,就可以調用方法了,否則它必須是一個抽象類。

 

介面:是功能的集合(介面中定義的都是方法)

定義介面使用的也是.java文件;編譯生成的也是.class文件

定義介面使用關鍵字interface

修飾符 interface 介面名 {

   抽象方法;

   預設方法; (JDK8以後新增)

   靜態方法; (JDK8以後新增)

}

 

介面的使用:

   1.介面不能創建對象使用

  2.可以定義一個實現類,實現(繼承)介面,重寫介面中的抽象方法,創建實現類對象使用

 

抽象方法:沒有方法體,被abstract修飾的方法

  預設的修飾符public abstract可以省略

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

 

    註意:
      介面中的抽象方法修飾符是可以省略不寫,不寫預設也是public abstract

      建議寫出,增強閱讀性

public interface MyInter {
    //定義抽象方法
    public abstract void show01();

    public abstract int show02();

    void show03(String s);
}

 

  定義介面的實現類

    使用格式:使用類實現介面,重寫介面中的抽象方法

      public class 實現類名 implements 介面{

        重寫介面中的抽象方法;

      }


    註意:

      實現類似於繼承,類實現介面,就可以繼承介面中的所有非私有的成員

public class MyInterImpl implements MyInter{
    @Override
    public void show01() {
        System.out.println("實現類重寫介面中的show01抽象方法!");
    }

    @Override
    public int show02() {
        System.out.println("實現類重寫介面中的show02抽象方法!");
        return 0;
    }

    @Override
    public void show03(String s) {
        System.out.println("實現類重寫介面中的show03抽象方法!"+s);
    }
}

 

 

public class Demo01MyInter {
    public static void main(String[] args) {
        //介面不能創建對象使用 'MyInter' is abstract; cannot be instantiated
        //MyInter mi = new MyInter();

        //創建介面的實現類對象
        MyInterImpl my = new MyInterImpl();
        my.show01();
        my.show02();
        my.show03("趙四");
    }
}

 

 

預設方法

    定義格式:

      修飾符 default 返回值類型 方法名(參數){

        方法體;

      }

 

      註意:

        預設方法的修飾符default不能省略

public interface MyInter {
    public default void show01(){
        System.out.println("MyInter介面中的預設show01方法");
    }

    public default  void show02(){
        System.out.println("MyInter介面中的預設show02方法");
    }
}

 

 

    1. 含有預設方法的介面的使用:定義實現類,實現介面,選擇性的重寫預設方法,創建實現類對象使用
    2. 重寫了預設方法:使用實現類重寫後的方法
    3. 沒有重寫預設方法:使用繼承自介面中的預設方法

    註意:

      實現類重寫介面中的預設方法,去掉default修飾符

 

public class MyInterImpl implements MyInter{
    @Override
    public void show01() {
        System.out.println("實現類重寫了MyInter介面中的show01預設方法");
    }
}

 

 

public class Demo01MyInter {
    public static void main(String[] args) {
       //創建介面的實現類對象
        MyInterImpl my = new MyInterImpl();
        my.show01();//實現類重寫的
        my.show02();//繼承自介面的
    }
}

 

 

靜態方法

    定義格式:

      修飾符 static 返回值類型 方法名(參數){

        方法體

      }

      註意:

        • 定義靜態方法不能省略static關鍵字
        • 定義含有靜態方法的介面使用:
        • 靜態成員屬於類(介面),所以可以通過介面名.方法名(參數)直接使用

 

public interface MyInter {
    public static void show01(){
        System.out.println("MyInter介面的靜態show01方法");
    }

    public static String show02(int a){
        System.out.println("MyInter介面的靜態show01方法"+a);
        return "哈哈";
    }
}

 

 

public class MyInterImpl implements MyInter{
    //@Override//Method does not override method from its superclass
    public static void show01(){
        System.out.println("MyInterImpl類的靜態show01方法");
    }
}

 

 

    靜態方法只能使用介面名調用,不可以通過實現類的類名或者實現類的對象調用

    靜態方法是不能重寫的,屬於類|介面本身,也不能被實現類繼承使用。在實現類中定義了靜態方法,屬於實現類本身

public class Demo01MyInter {
    public static void main(String[] args) {
        //通過介面名.方法名(參數)調用介面中的靜態方法
        MyInter.show01();
        String s = MyInter.show02(10);
        System.out.println(s);

        MyInterImpl.show01();
    }
}

 

 

介面的多實現

  語法

    class 類名 [extends 父類名] implements 介面名1,介面名2,介面名3... {

      // 重寫介面中抽象方法【必須】

      // 重寫介面中預設方法【不重名時可選】

    }

 

  抽象方法

    介面中,有多個抽象方法時,實現類必須重寫所有抽象方法。如果多個介面中抽象方法有重名的,只需要重寫一次。

 

  預設方法

    介面中,有多個預設方法時,實現類都可繼承使用。如果預設方法有重名的,必須重寫一次。

 

  靜態方法

    介面中,存在同名的靜態方法並不會衝突,原因是只能通過各自介面名訪問靜態方法。

 

  優先順序的問題

    當一個類,既繼承一個父類,又實現若幹個介面時,父類中的成員方法與介面中的預設方法重名,子類就近選擇執行父類的成員方法。

 

介面的多繼承

  • 介面的繼承使用 `extends` 關鍵字,子介面繼承父介面的方法。如果多個父介面中的預設方法有重名的,那麼子介面需要重寫一次
  • 子介面重寫預設方法時,default關鍵字可以保留。
  • 子類重寫預設方法時,default關鍵字不可以保留。

 

其他成員的特點

  - 介面中,無法定義成員變數,但是可以定義常量,其值不可以改變,預設使用public static final修飾。

  - 介面中,沒有構造方法,不能創建對象。

  - 介面中,沒有靜態代碼塊。

 

抽象類和介面

    • 一個類只能繼承一個直接父類(可能是抽象類),卻可以實現多個介面, 介面彌補了Java的單繼承
    • ​抽象類為繼承體系中的共性內容, 介面為繼承體系中的擴展功能

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript 中 apply、call、bind方法的異同: 相同點 都是用來動態指定函數 this 對象的指向 第一個參數都是 this 要指向的對象,也就是要指定的上下文 都可以利用後續參數傳參 不同點 傳參形式不同:apply 方法接受的是一個參數數組,call 和 bind 方法接受 ...
  • TypeScript聯合類型 聯合類型表示取值可以為多種類型中的一種 如下所示 這一塊我們必須使用string或者number都支持的類型,那麼下麵我們可以進行調用擴展方法toString() TypeScript中對象類型 介面 介面可以描述一種抽象的行為,也可以描述對象的結構形狀,當然我們也需要 ...
  • v-bind:class=" " 綁定樣式 <div id="app"> <!-- 值是對象形式,欄位名是class樣式名,值是boolean值,true是引用該樣式,false不引用 --> <!-- 值是false,只是不引用該樣式,並不是就不顯示該元素了 --> <p v-bind:class ...
  • 前臺:支持(5+3[時尚單頁風格])八套模版,可以在後臺切換 業務模塊(首頁管理) 1. 網站信息:維護網站基本信息,比如標題、描述、關鍵詞、聯繫方式、地址等 2. 業務說明:網站首頁文字業務介紹 3. 公司理念:網站首頁展示公司的4個理念 4. 輪播圖片:網站首頁上面4個輪播圖5. 項目案例:網站 ...
  • 在前面的博客中已經介紹過如何使用Python來操作MySQL資料庫,最近需要將一批數據從csv文件中遷移到Oracle資料庫中,也打算用Python來實現,趁著這個機會,也寫一篇博客學習總結一些如何使用Python來操作Oracle資料庫。 ...
  • 原文鏈接:http://www.yiidian.com/fastjson/fastjson json javabean.html 1 簡單JSON與JavaBean的轉換 1.1 設計Student實體類 1.2 簡單JSON轉為JavaBean MainApp: 運行效果為: 1.3 JavaBe ...
  • 虛擬機 虛擬機簡介 Java 虛擬機(JVM)是運行java程式的抽象電腦,它是電腦設備的規範,可以採用不同方式進行實現,java 程式通過運行在JVM中實現跨平臺,一次編譯到處運行,不同的操作系統有不同的JDK版本,通過調用JNI方法去實現調用不同操作系統的方法 Java虛擬機不和包括java ...
  • Java 中所謂的引用,看似是指針的問題,實則體現的是JVM對記憶體的管理思想。 -- 魯迅 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...