我应该将公共接口放在单独的文件中吗?

Rom*_*man 9 java interface public

我有以下代码:

import com.apple.dnssd.*;

public interface IServiceAnnouncer {
    public void registerService();
    public void unregisterService();
    public boolean isRegistered();
}

class HelloWorld {
        public static void main(String[] args) {
                System.out.println("Hello, World!");
        }
}
Run Code Online (Sandbox Code Playgroud)

此代码保存在名为"HelloWorld.java"的文件中.Java编译器抱怨这段代码.它写道该类IServiceAnnouncer是公共的,它应该在一个名为"IServiceAnnouncer.java"的文件中声明.

我有几个问题:

  1. 为什么编译器会说这IServiceAnnouncer是一个类?这是一个界面.或者接口是一个类的部分情况?

  2. 如果我将接口IServiceAnnouncer放在一个名为"IServiceAnnouncer.java"的单独文件中(正如编译器所希望的那样),那么我怎样才能从"HelloWorld.java"中使用它?

  3. 什么public interface意思?公共界面和非公共界面有什么区别?

Bri*_*new 16

你应该把它放在一个单独的文件中.这样,在不知道实现细节或不得不拖入相关依赖项的情况下,交换不同的实现,或者让其他人可以使用接口(系统的API)进行编码是更容易的.

例如,通用Java API的实现 - 例如servlet - 将具有针对Sun提供的接口包编码的实现(在这种情况下javax.servlet)

你如何从实施中使用它?通过导入它.如果它在同一个包中并且您正在同时编译所有接口/实现,则这是不必要的.

请注意,接口以与实现相同的方式(使用您定义的内容class)编译为.class文件.

  • 接口不必是公共的.它们可以在一个包中使用,甚至可以在一个类中私有(我已经为State模式做了这个). (3认同)

Sea*_*wen 8

这些答案在正确的答案周围跳舞。

  1. 是的,您可以在 Java 中的一个文件中声明多个类。
  2. 您不能声明多个公共类,因为:
  3. 公共类的名称必须与其包含的文件名相匹配;这是你的编译错误

在 Java 中在一个文件中声明多个类是很奇怪的,即使你可以。不要这样做。

您将 IServiceAnnouncer 放在一个单独的文件中,并在 HelloWorld.java 中导入类名。您只需同时编译它们,将两个文件名传递给 javac。这一切都有效。

公共接口,就像 Java 中的任何其他公共接口一样,是一种可以从任何其他类中看到和使用的类型。如果没有“public”,它的可见性称为包私有,这意味着只有同一个包中的东西才能使用它。


Chr*_*s K 6

你没有选择.所有公共类/接口必须位于名为ClassOrInterfaceName.java的文件中.