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 不支持多重继承,但通过接口实现了一种变相的多重继承。
此外,多态可以通过接口来实现这一理念,正是接口机制的根基。