接口

接口 属于 Java

1 个练习

关于 接口

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

实现接口的类必须实现接口定义的所有操作。

接口通常有以下一种或多种用途:

  • 让调用方能够以通用的方式处理多个不同的类。 此时接口扮演的角色与基类相同。 一个例子是 java.io.InputStream。
  • 出于某种特定目的,只对外暴露一部分功能(例如 Comparable<T>)。
  • 暴露一个类的公开 API,使多种实现可以共存。 一个例子是测试替身。
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 不支持多重继承,但通过接口实现了一种变相的多重继承。

此外,多态可以通过接口来实现这一理念,正是接口机制的根基。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 接口