interfaces 是把類別的使用和其實作解耦合的主要方法。
這種解耦合讓實作在維護上更有彈性,也有助於支援型別安全的泛型行為。
介面的語法和類別相似,差別在於方法只以簽章的形式出現,不提供主體。
public interface Language {
String speak();
}
public interface ItalianLanguage extends Language {
String speak();
String speakItalian();
}
public interface ScriptConverter {
void setVersion(String version);
String getVersion();
String convertCyrillicToLatin(String cyrillic);
}
實作介面的類別必須實作介面定義的所有操作。
介面通常會做到下列一項或多項事情:
Comparable<T>)public class ItalianTraveller implements ItalianLanguage {
public String speak() {
return "Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class ItalianTravellerV2 implements ItalianLanguage {
public String speak() {
return "migliorata - Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class FrenchTraveller implements Language {
public String speak() {
return "Ça va?";
}
}
public class RussianTraveller implements Language, ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String speak()
{
return "Привет мир";
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
public class DocumentTranslator implements ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String translate(String russian) {
throw new UnsupportedOperationException();
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
使用上述介面與類別的程式碼可以:
介面之所以廣泛用於支援測試,是因為它們讓模擬變得容易。
介面可以用extend關鍵字擴充其他介面。
介面的成員預設為 public。
介面可以包含巢狀型別:interfaces、enums 和 classes。
在這裡,外層的介面就扮演命名空間的角色。
在介面外部存取巢狀型別時,要在前面加上介面名稱,並用點號語法指出成員。
Java 在設計上不支援多重繼承,但它透過介面提供了某種形式的多重繼承。
此外,多型可以透過介面實作的概念,也支撐著整個介面機制。