Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

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 知道這個特定介面將用於事件委託場景。

為類新增資料型別 - 這種情況就是術語“標記”的來源。實現標記介面的類不需要定義任何方法(因為介面沒有任何方法),但該類透過多型性成為介面型別。

廣告