将接口与Java实现分离
如何将接口与Java实现分离 在C/C++中,这可以通过创建两个文件来完成,一个是具有相同文件名的.C文件,另一个是.h文件。将接口与Java实现分离,java,Java,如何将接口与Java实现分离 在C/C++中,这可以通过创建两个文件来完成,一个是具有相同文件名的.C文件,另一个是.h文件。 如何在Java中实现这一点?方法是创建一个接口,并(通常)在两个文件中实现它- Say.java接口- public interface Say { public void say(String msg); } 和Hello.java,具体实现(在本例中也是如此)也是main()方法- public class Hello implements Say { @
如何在Java中实现这一点?方法是创建一个
接口,并(通常)在两个文件中实现它-
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
TLDR—您没有。与.h和.c分离最接近的类比是接口
MyInterface.java
interface MyInterface {
void doSomething();
}
class MyImplementation implements MyInterface {
public void doSomething() {
System.out.println("Hello world");
}
}
MyImplementation.java
interface MyInterface {
void doSomething();
}
class MyImplementation implements MyInterface {
public void doSomething() {
System.out.println("Hello world");
}
}
然后,除了实际的构造函数之外,您可以在任何地方使用接口类型
MyInterface instance = new MyImplementation();
当然,有几个不同之处
- 一个类可以实现多个接口,多个类可以实现一个接口
- 接口中不包括成员值,仅包括方法
- Java接口中只显示公共方法
- 接口中不允许执行任何(与依赖于.h实现的C++模板相反)。
但这就是“接口编程”的实现方式
在Java中,接口和具体类的命名没有一致的约定。C#(在处理接口方面几乎相同)有一个约定,我在接口以I
开头时使用它,例如IList
。Java标准库倾向于使用接口的“纯”名称,然后根据具体实现对其进行修改,例如List
(接口)和ArrayList
(实现)。要将接口和实现分开,建议以下步骤
(1).确定属于类定义一部分的方法。这将成为具有类似功能的新类的模板
(二)。创建一个新接口,其中包含被标识为接口定义一部分的方法(可能是多个接口)
(3.)修改类以实现您在Java中创建的接口,接口和类(即“实现”)在文件级别或名称上不可区分。它们都是声明。具体来说,类声明它实现的接口。例如:
public class MyClass implements Interface1, Interface2, .... {
// implementations
}
Java没有与C/C++中相同的“链接”概念。您可以以任何合法形式调用类或接口。运行时接口与其实现类之间的“链接”是通过类加载器完成的 您可能正在寻找Java接口。但是它们并不完全相同。我需要创建两个具有相同文件名的.java文件吗?一个有接口,另一个有实现定义?“接口只应在您期望多个类实现它们时使用”只是为了澄清:在许多Java库中,接口只有一个实现。然而,在这些情况下,采用不同的实施方式是合理的。“你不喜欢”可能太强烈了。我会坚持你不喜欢。在您真正编写第二个实现之前,这是徒劳的。当你真正开始的时候,你几乎总是会把界面变得更好。在至少有两个实现之前,我不会中断一个接口。回调接口是个例外,进行回调的类需要这个定义。那么,java程序中的某些类没有接口是正常的吗?绝大多数都没有。接口用于回调和多个实现的行为。例如,List,其中包含用于不同实现的ArrayList和LinkedList。