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