接口是抽象方法的集合,定義「能做什麼」的契約,不關心「怎麼做」。關鍵字 interface,隱式 public abstract 修飾方法,隱式 public static final 修飾字段。
public interface Animal {
void eat(); // 隱式 public abstract
void travel(); // 隱式 public abstract
}
public class Dog implements Animal {
@Override public void eat() { System.out.println("Dog eats meat"); }
@Override public void travel() { System.out.println("Dog runs"); }
public static void main(String[] args) {
Animal d = new Dog();
d.eat(); d.travel();
}
}
implements 多個接口,突破單繼承限制。extends 多個父接口。public interface Swimmable {
default void swim() { System.out.println("Swimming..."); } // 可選覆寫
static void dive() { System.out.println("Diving deep"); } // 接口級工具方法
}
public class Fish implements Swimmable {
// 不覆寫 swim() 直接使用默認實現
public static void main(String[] args) {
Fish f = new Fish();
f.swim();
Swimmable.dive(); // 靜態方法通過接口名調用
}
}
public interface Sports {
void setHomeTeam(String name);
void setVisitingTeam(String name);
}
public interface Football extends Sports { // 接口繼承接口
void homeTeamScored(int points);
void visitingTeamScored(int points);
void endOfQuarter(int quarter);
}
// 實現 Football 需實現 5 個方法 (2 來自 Sports)
public class Match implements Football { /* ... */ }
default 方法衝突:實現多個接口含同名默認方法 → 必須顯式覆寫並指定調用 InterfaceA.super.method()。// 標記接口:無方法,僅標識能力 (如 Serializable, Cloneable)
public interface Auditable {}
// 能力接口:定義行為契約
public interface Exportable {
void export(OutputStream out);
}
// 組合使用
public class Report implements Auditable, Exportable {
@Override public void export(OutputStream out) { /* PDF/Excel 導出 */ }
}
接口是 Java 實現多態、解耦、擴展的核心機制。Java 8 賦予默認/靜態方法後,接口進化為「帶實現的契約」,進一步弱化抽象類地位。設計原則:面向接口編程、接口盡量小而專一(單一職責)、優先組合繼承。