首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 介面完整解析:宣告、實作、繼承、多重繼承、標記介面與抽象類別差異

     編輯:Java 程式設計入門

Java 介面完整解析

介面(Interface)是抽象型別、抽象方法集合,以 interface 宣告。類別透過 implements 實作介面,繼承其抽象方法。


介面與類別相同點

  • 可包含多個方法
  • 儲存為 .java 檔,檔名即介面名
  • 編譯為 .class 位元碼檔
  • 位元碼目錄結構需符合套件名稱

介面與類別不同點

  • 無法實例化物件
  • 無建構方法
  • 所有方法皆為抽象方法(隱式 public abstract)
  • 無成員變數(僅允許 static final 常數)
  • 非被類別繼承,而是被類別實作
  • 支援多重繼承

介面特性

  • 方法隱式 public abstract(其他修飾符會編譯錯誤)
  • 變數隱式 public static final(private 會編譯錯誤)
  • 方法無法在介面中實作,必須由實作類別實現

抽象類別 vs 介面 關鍵差異

差異點抽象類別介面
方法主體可有方法主體(具體實作)不可有方法主體
成員變數型別任意型別僅 public static final
靜態區塊/方法可有不可有(Java 8 前)
繼承/實作限制單一繼承可多重實作

介面宣告語法

[visibility] interface InterfaceName [extends OtherInterface] {
    // 常數欄位
    // 抽象方法
}

簡單介面範例

public interface NameOfInterface {
    // 任何型別 final static 欄位
    // 抽象方法
}

特性:隱式抽象、隱式 public abstract、方法皆為 public

Animal 介面

interface Animal {
    void eat();
    void travel();
}

介面實作

類別需實作介面所有方法,否須宣告為抽象類。語法:

class ClassName implements InterfaceName[, OtherInterface...] { ... }

MammalInt 實作 Animal

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();
    }
}

輸出:

Mammal eats
Mammal travels

重寫介面方法規則

  • 不可拋出較寬泛的檢查型異常
  • 保持方法名、相容回傳型別
  • 實作類為抽象類時可不實作方法

介面繼承

介面可繼承介面,使用 extends,子介面繼承父介面方法。

public interface Sports { void setHomeTeam(String name); void setVisitingTeam(String name); }
public interface Football extends Sports { void homeTeamScored(int pts); void visitingTeamScored(int pts); void endOfQuarter(int q); }
public interface Hockey extends Sports { void homeGoalScored(); void visitingGoalScored(); void endOfPeriod(int p); void overtimePeriod(int ot); }

實作 Hockey 需實作 6 個方法(4 自有 + 2 繼承),實作 Football 需 5 個。


介面多重繼承

類別多重繼承非法,但介面允許:

public interface Hockey extends Sports, Event { ... }

標記介面

無任何方法與屬性的介面,如 java.util.EventListener:

package java.util;
public interface EventListener {}

兩大用途

  1. 建立公共父介面:JVM 識別特定用途(如事件代理)
  2. 為類別添加資料型別:無需定義方法,透過多態性成為介面型別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved