在一个单一的java文件,是有可能有一个公共接口和公共类(用于实施接口)的Java公共接口和公共类在同一个文件
我是新来的Java编码,它是在网上大多数地方写的.java文件不能包含超过2个公共类。我想知道它是否也适用于接口和类。
在一个单一的java文件,是有可能有一个公共接口和公共类(用于实施接口)的Java公共接口和公共类在同一个文件
我是新来的Java编码,它是在网上大多数地方写的.java文件不能包含超过2个公共类。我想知道它是否也适用于接口和类。
不,这是不可能的。每个.java
文件最多可能有一个顶级公用类型。 JLS 7.6. Top Level Type Declarations陈述如下:
[…]每个编译单元最多只能有一个[顶级公共]类型。
但是,您可以在同一个文件中包含一个受保护的类。编译没有问题(如果你把它放在一个名为Test.java
文件:
public interface Test {
// ...
}
class TestClass implements Test {
// ...
}
[JLS§7.6顶级键入声明](http://java.sun.com/docs/books/jls/third_edition/html/packages.html#26783) –
Java的规则是,只有一个公共类或接口可以在源文件中显示出来,并且名称必须与文件相匹配(即测试的.java - >公共类测试或公共接口测试,但不能同时)
,只要你想在一个文件中,如果你使用嵌套类,你可以有许多公开课在您的例子:
public interface I {
public class C implements I {
...
}
public class D implements I {
...
}
...
}
。
正是!我即将发布类似的答案。你能否告诉我这样的结构有什么意义?如果我尝试实例化类“C”,我不得不重新实现'I'中定义的方法,即使我已经在违反类'C'时做了它!附:我猜'C'不需要是静态的.. – Gevorg
@Gevorg - 静态关键字意味着它与顶级类相同。这里唯一的区别是你只能将C引用为'I.C' – Kal
如果我定义了一个接口'I'和'I'的'默认实现',如果不需要特殊实例,我经常使用这个习惯用法。我喜欢这个,因为我可以将它们关闭 - 无需将它们分散在多个文件中。除此之外,它只是读真棒:'setParam(new Interface.Default());'如果我没有使用内部类,那么我不得不考虑一个聪明的名字,这样我可以称它为'Default '。 – emboss
public interface A
{
public void helloWorld();
public static class B implements A{
@Override
public void helloWorld() {
System.out.print("Hello World");
}
}
}
在了解接口的同时,还需要了解interface driven programming作为下一步。它告诉接口的实际使用是什么。它在Java(或任何其他语言)程序中扮演了什么角色。
[Java:多个类声明在一个文件中]的可能重复(http://stackoverflow.com/questions/2336692/java-multiple-class-declarations-in-one-file) –