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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...