Java公共接口和公共类位于同一文件中

Java公共接口和公共类位于同一文件中,java,Java,在单个.Java文件中,是否可以有一个公共接口和一个公共类(实现该接口) 我是Java编码新手,在网络上的大多数地方都有这样的说法:一个.Java文件不能包含超过2个公共类。我想知道接口和类是否也是如此。不,这是不可能的。每个.java文件最多只能有一个顶级公共类型。声明如下: […]每个编译单元最多必须有一个[顶级公共]类型 但是,您可以在同一文件中有一个受包保护的类。这可以很好地编译(如果将其放在名为Test.java的文件中): public interface Test { //

在单个.Java文件中,是否可以有一个公共接口和一个公共类(实现该接口)


我是Java编码新手,在网络上的大多数地方都有这样的说法:一个.Java文件不能包含超过2个公共类。我想知道接口和类是否也是如此。

不,这是不可能的。每个
.java
文件最多只能有一个顶级公共类型。声明如下:

[…]每个编译单元最多必须有一个[顶级公共]类型

但是,您可以在同一文件中有一个受包保护的类。这可以很好地编译(如果将其放在名为
Test.java
的文件中):

public interface Test {
    // ...
}

class TestClass implements Test {
    // ...
}

Java规则是一个源文件中只能显示一个公共类或接口,并且名称必须与文件匹配(即Test.Java-->公共类测试或公共接口测试,但不能两者都匹配)。

如果使用嵌套类,则一个文件中可以有任意多个公共类。在您的示例中:

public interface I {
    public class C implements I {
        ...
    }

    public class D implements I {
        ...
    }

    ...
}

理解接口的下一步还需要理解。它告诉我们接口的实际用途。它在Java(或任何其他语言)程序中扮演什么角色。

是的,我们可以在同一个Java文件中编写接口和

interface Interfable {
public void interfMethod();
}

公共类试验林{

int x = 5;

public void testLamMethod() {
    int y = 10;
    Interfable i = () -> {
        System.out.println(x);
        System.out.println(y);
    };
    i.interfMethod();
}

public static void main(String[] args) {

    TestLam t = new TestLam();
    t.testLamMethod();
}
}

输出: 五,

十,


//注意。java文件名应该与类名相同

可能重复您为什么要这样做?没错!我正要发布一个类似的答案。您能告诉我有这样一个结构的意义吗?如果我尝试实例化类“C”,我将被迫重新实现“I”中定义的方法,即使我已经这样做了当挑战类“C”!P.S.我想“C”不需要是静态的。@Gevorg——static关键字意味着它与顶级类相同。这里唯一的区别是,你只能将C称为
I.C
,如果我定义了接口“I”和“默认实现”,我经常使用这个习惯用法在不需要特殊实例的情况下使用的“I”。我喜欢这样,因为我可以将它们关闭-无需将它们分散在多个文件中。此外,它只是说:
setParam(new Interface.Default())听起来很棒
如果我没有在那里使用内部类,我必须考虑一个聪明的名称,这样我就可以称它为
默认值
。接口的成员类是隐式公共的和静态的。@emboss--一点。我认为“内部”这个词在静态类的上下文中是令人困惑的。通常,这些是指嵌套类。另外,我认为您不需要公共类或静态类,因为它嵌套在接口中。回答得好。+1。
int x = 5;

public void testLamMethod() {
    int y = 10;
    Interfable i = () -> {
        System.out.println(x);
        System.out.println(y);
    };
    i.interfMethod();
}

public static void main(String[] args) {

    TestLam t = new TestLam();
    t.testLamMethod();
}