将接口与Java中的实现分离

  • 本文关键字:实现 分离 Java 接口 java
  • 更新时间 :
  • 英文 :


如何将接口与Java中的实现分离?

在C/c++中,这可以通过创建两个文件名相同的文件来完成。C和。h文件。在Java中如何做到这一点呢?

与。h和。c的分离最接近的类比是接口。

MyInterface.java

interface MyInterface {
    void doSomething();
}

MyImplementation.java

class MyImplementation implements MyInterface {
    public void doSomething() {
        System.out.println("Hello world");
    }
}

然后除了实际的构造函数

之外,在所有地方都使用接口类型
MyInterface instance = new MyImplementation();

当然,有几个不同之处。

  • 一个类可以实现多个接口,多个类可以实现一个接口
  • 接口中不包含成员值,只包含方法。
  • Java接口中只出现公共方法。
  • 接口中不允许有任何实现(与c++模板相反,c++模板依赖于.h实现)。

但这就是"面向接口编程"的实现方式。


在Java中,接口和具体类的命名没有一致的约定。c#(在接口的处理上几乎相同)有一个约定,我在接口以I开头的地方使用了这个约定,例如IList。Java标准库倾向于为接口使用"纯"名称,然后为具体实现修改它,例如List(接口)和ArrayList(实现)。

通过创建interface,并(通常)在两个文件中实现它-

Say.java接口-

public interface Say {
  public void say(String msg);
}

Hello.java,具体实现(在这种情况下)也是一个main()方法-

public class Hello implements Say {
  @Override
  public void say(String msg) {
    System.out.printf("%s, World!%n", msg);
  }
  public static void main(String[] args) {
    Say s = new Hello();
    s.say("Hello");
  }
}

注意:在Java中,可以有多个具有main()方法的类。使用@Override注释也是一个很好的实践。

你没有。您可以通过Java接口来实现,但是对每个类都这样做将是糟糕的设计。接口只应该在期望多个类实现它们时使用,或者用作回调函数描述时使用。在c++中,将代码与。h文件分开的关键是

1)为了防止二进制文件的膨胀,因为编译器会为包含在

中的每个文件生成每个函数的多个版本

2)让那些只想要实现的人更容易阅读。

在java中,1不是问题。Java更倾向于通过自动化文档工具(JavaDoc)来解决2。

在Java中,接口和类(即"实现")在文件级别或名称上是不能区分的。它们都是声明。具体来说,一个类声明它实现了哪个接口。例如:

public class MyClass implements Interface1, Interface2, .... {
    // implementations
}

Java没有与C/c++相同的"链接"概念。您可以以任何合法形式调用类或接口。在运行时,接口和它的实现类之间的"链接"是通过类加载器完成的。

要将接口和实现分开,建议采用以下步骤:

(1).识别属于类定义一部分的方法。这将成为具有类似功能的新类的模板。

(2)。创建一个新接口,其中包含被标识为接口定义(可能是许多接口)一部分的方法

(3)。修改您的类以实现您创建的接口

最新更新