
Java 教程
- Java - 首頁
- Java - 概述
- Java - 歷史
- Java - 特性
- Java 與 C++
- JVM - Java 虛擬機器
- Java - JDK 與 JRE 與 JVM
- Java - Hello World 程式
- Java - 環境搭建
- Java - 基本語法
- Java - 變數型別
- Java - 資料型別
- Java - 型別轉換
- Java - Unicode 系統
- Java - 基本運算子
- Java - 註釋
- Java - 使用者輸入
- Java - 日期和時間
Java 控制語句
- Java - 迴圈控制
- Java - 決策制定
- Java - If-else
- Java - Switch
- Java - For 迴圈
- Java - For-Each 迴圈
- Java - While 迴圈
- Java - do-while 迴圈
- Java - Break
- Java - Continue
面向物件程式設計
- Java - OOPs 概念
- Java - 物件和類
- Java - 類屬性
- Java - 類方法
- Java - 方法
- Java - 變數作用域
- Java - 建構函式
- Java - 訪問修飾符
- Java - 繼承
- Java - 聚合
- Java - 多型
- Java - 重寫
- Java - 方法過載
- Java - 動態繫結
- Java - 靜態繫結
- Java - 例項初始化塊
- Java - 抽象
- Java - 封裝
- Java - 介面
- Java - 包
- Java - 內部類
- Java - 靜態類
- Java - 匿名類
- Java - 單例類
- Java - 包裝類
- Java - 列舉
- Java - 列舉建構函式
- Java - 列舉字串
Java 內建類
Java 檔案處理
Java 錯誤和異常
- Java - 異常
- Java - try-catch 塊
- Java - try-with-resources
- Java - 多重捕獲塊
- Java - 巢狀 try 塊
- Java - Finally 塊
- Java - throw 異常
- Java - 異常傳播
- Java - 內建異常
- Java - 自定義異常
Java 多執行緒
- Java - 多執行緒
- Java - 執行緒生命週期
- Java - 建立執行緒
- Java - 啟動執行緒
- Java - 執行緒連線
- Java - 執行緒命名
- Java - 執行緒排程器
- Java - 執行緒池
- Java - 主執行緒
- Java - 執行緒優先順序
- Java - 守護執行緒
- Java - 執行緒組
- Java - 關閉鉤子
Java 同步
Java 網路
- Java - 網路
- Java - 套接字程式設計
- Java - URL 處理
- Java - URL 類
- Java - URLConnection 類
- Java - HttpURLConnection 類
- Java - Socket 類
- Java - 泛型
Java 集合
Java 介面
Java 資料結構
Java 集合演算法
高階 Java
- Java - 命令列引數
- Java - Lambda 表示式
- Java - 傳送郵件
- Java - Applet 基礎
- Java - Javadoc 註釋
- Java - 自動裝箱和拆箱
- Java - 檔案不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 檔案
- Java - 私有介面方法
- Java - 內部類菱形運算子
- Java - 多解析度影像 API
- Java - 集合工廠方法
- Java - 模組系統
- Java - Nashorn JavaScript
- Java - Optional 類
- Java - 方法引用
- Java - 函式式介面
- Java - 預設方法
- Java - Base64 編碼解碼
- Java - Switch 表示式
- Java - Teeing 收集器
- Java - 微基準測試
- Java - 文字塊
- Java - 動態 CDS 歸檔
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指標異常
- Java - 打包工具
- Java - 密封類
- Java - 記錄類
- Java - 隱藏類
- Java - 模式匹配
- Java - 簡潔數字格式化
- Java - 垃圾回收
- Java - JIT 編譯器
Java 雜項
- Java - 遞迴
- Java - 正則表示式
- Java - 序列化
- Java - 字串
- Java - Process API 改進
- Java - Stream API 改進
- Java - 增強的 @Deprecated 註釋
- Java - CompletableFuture API 改進
- Java - 流
- Java - 日期時間 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 類參考
- Java - Scanner
- Java - 陣列
- Java - 字串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用資源
Java - 介面
Java 介面
Java 介面是抽象方法的集合。介面用於實現抽象,其中您可以定義方法而無需實現(無需方法體)。介面是一種引用型別,類似於類。
除了抽象方法外,介面還可以包含常量、預設方法、靜態方法和巢狀型別。方法體僅存在於預設方法和靜態方法中。
編寫介面類似於編寫類。但是,類描述了物件的屬性和行為。介面包含類實現的行為。除非實現介面的類是抽象的,否則介面的所有方法都需要在類中定義。
Java 介面和類:異同
相似之處
介面在以下方面類似於類 -
介面可以包含任意數量的方法。
介面以.java副檔名寫入檔案,介面名稱與檔名匹配。
介面的位元組碼出現在.class檔案中。
接口出現在包中,其相應的位元組碼檔案必須位於與包名稱匹配的目錄結構中。
區別
但是,介面在幾個方面與類不同,包括 -
您不能例項化介面。
介面不包含任何建構函式。
介面中的所有方法都是抽象的。
介面不能包含例項欄位。介面中可以出現的唯一欄位必須同時宣告為靜態和最終的。
介面不是由類擴充套件的;它是類實現的。
介面可以擴充套件多個介面。
在 Java 中宣告介面
interface關鍵字用於宣告介面。以下是一個宣告介面的簡單示例 -
宣告 Java 介面的示例
以下是一個介面示例 -
/* File name : NameOfInterface.java */ import java.lang.*; // Any number of import statements public interface NameOfInterface { // Any number of final, static fields // Any number of abstract method declarations\ }
Java 介面的屬性
介面具有以下屬性 -
介面隱式抽象。在宣告介面時,您不需要使用abstract關鍵字。
介面中的每個方法也隱式抽象,因此不需要abstract關鍵字。
介面中的方法隱式為 public。
示例
/* File name : Animal.java */ interface Animal { public void eat(); public void travel(); }
在 Java 中實現介面
當一個類實現一個介面時,您可以將該類視為簽署了一份合同,同意執行介面的特定行為。如果一個類沒有執行介面的所有行為,則該類必須將自身宣告為抽象類。
類使用implements關鍵字來實現介面。implements關鍵字出現在類宣告中,位於宣告的extends部分之後。
示例:在 Java 中實現介面
/* File name : MammalInt.java */ public class MammalInt implements Animal { public void eat() { System.out.println("Mammal eats"); } public void travel() { System.out.println("Mammal travels"); } public int noOfLegs() { return 0; } public static void main(String args[]) { MammalInt m = new MammalInt(); m.eat(); m.travel(); } } interface Animal { public void eat(); public void travel(); }
輸出
Mammal eats Mammal travels
定義 Java 介面中重寫方法的規則
當重寫介面中定義的方法時,需要遵循以下幾個規則 -
除了介面方法宣告或介面方法宣告的子類之外,不應在實現方法上宣告已檢查的異常。
在重寫方法時,應保持介面方法的簽名和相同的返回型別或子型別。
實現類本身可以是抽象的,如果是這樣,則不需要實現介面方法。
實現 Java 介面的規則
實現介面時,有以下幾個規則 -
一個類可以同時實現多個介面。
一個類只能擴充套件一個類,但可以實現多個介面。
介面可以擴充套件另一個介面,就像類可以擴充套件另一個類一樣。
擴充套件 Java 介面
介面可以擴充套件另一個介面,就像類可以擴充套件另一個類一樣。extends關鍵字用於擴充套件介面,子介面繼承父介面的方法。
示例:如何擴充套件 Java 介面
以下 Sports 介面被 Hockey 和 Football 介面擴充套件。
// Filename: Sports.java public interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } // Filename: Football.java public interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } // Filename: Hockey.java public interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); }
Hockey 介面有四個方法,但它從 Sports 繼承了兩個;因此,實現 Hockey 的類需要實現所有六個方法。類似地,實現 Football 的類需要定義 Football 的三個方法和 Sports 的兩個方法。
示例
interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); } public class HockeyDemo implements Hockey { public void setHomeTeam(String name) { System.out.println("Home team: " + name); } public void setVisitingTeam(String name) {} public void homeGoalScored() {} public void visitingGoalScored() {} public void endOfPeriod(int period) {} public void overtimePeriod(int ot) {} public static void main(String[] args) { Hockey hockeyDemo = new HockeyDemo(); hockeyDemo.setHomeTeam("India"); } }
輸出
Home team: India
擴充套件多個 Java 介面
Java 類只能擴充套件一個父類。不允許多重繼承。但是,介面不是類,一個介面可以擴充套件多個父介面。
extends 關鍵字只使用一次,並且父介面以逗號分隔的列表形式宣告。
例如,如果 Hockey 介面擴充套件了 Sports 和 Event,則宣告為 -
public interface Hockey extends Sports, Event
示例:如何擴充套件多個 Java 介面
interface Sports { public void setHomeTeam(String name); public void setVisitingTeam(String name); } interface Football extends Sports { public void homeTeamScored(int points); public void visitingTeamScored(int points); public void endOfQuarter(int quarter); } interface Hockey extends Sports { public void homeGoalScored(); public void visitingGoalScored(); public void endOfPeriod(int period); public void overtimePeriod(int ot); } interface Event { public void organize(); } public class HockeyDemo implements Hockey, Event { public void setHomeTeam(String name) { System.out.println("Home team: " + name); } public void setVisitingTeam(String name) {} public void homeGoalScored() {} public void visitingGoalScored() {} public void endOfPeriod(int period) {} public void overtimePeriod(int ot) {} public static void main(String[] args) { HockeyDemo hockeyDemo = new HockeyDemo(); hockeyDemo.setHomeTeam("India"); hockeyDemo.organize(); } public void organize() { System.out.println("Match organized. "); } }
輸出
Home team: India Match organized.
標記 Java 介面
擴充套件介面最常見的用法是當父介面不包含任何方法時。例如,java.awt.event 包中的 MouseListener 介面擴充套件了 java.util.EventListener,其定義如下:
示例
package java.util; public interface EventListener {}
一個不包含任何方法的介面被稱為標記介面。標記介面有兩個基本的設計目的:
建立公共父類 - 與 EventListener 介面一樣,它被 Java API 中的其他數十個介面擴充套件,您可以使用標記介面在介面組之間建立公共父類。例如,當一個介面擴充套件 EventListener 時,JVM 知道這個特定介面將用於事件委託場景。
為類新增資料型別 - 這種情況就是術語“標記”的來源。實現標記介面的類不需要定義任何方法(因為介面沒有任何方法),但該類透過多型性成為介面型別。