一个文件中的两个公共类java

好吧,这可能是java中的小孩问题。 我们不能在一个文件中定义两个公共类。 但是,在SCJP学习指南一书中的一个例子中,提到了这个例子:

public abstract class A{ public abstract void show(String data); } public class B extends A{ public void show(String data){ System.out.println("The string data is "+data); } public static void main(String [] args){ B b = new B(); b.show("Some sample string data"); } } 

当我把它粘贴到netbeans中时立即抛出编译错误,那个公共类A应该在单独的文件中提到。 那个来自SCJP styudy指南的例子真的错了吗? 在一些模拟测试中,我发现许多问题都有这样的模式,但是在所有选项中都没有提到编译器错误。 在这里担心

是的,一个文件中不允许使用2个顶级公共类

好吧,如果一个人如此挑剔:你可以在同一个文件中使用public修饰符定义多个类,即使用静态嵌套(内部)类。 喜欢这个:

文件 – > Test.java

 public class Test { public static class SomeNestedClass { } } 

是的,你可以在同一个文件中有两个类。 您可以通过从类名中删除公共访问修饰符来获取它们,如下所示,

 abstract class A{ public abstract void show(String data); } class B extends A{ public void show(String data){ System.out.println("The string data is "+data); } public static void main(String [] args){ B b = new B(); b.show("Some sample string data"); } } 

你可以在一个包含它们的类中的一个文件中创建2个公共类。

如果您不需要对容器类的任何引用,也建议为它们添加“static”。

想象一下,您可以将两个公共类放在一个文件中,然后考虑编译器的工作:它必须从.java文件中构建一个.class文件,该文件只代表一个类(否则.class结尾不会有任何意义) )。

JAVA编译器的工作方式只是创建一个带有文件名的.class文件,并将在给定文件中搜索带有文件名的类 – 所以它取决于你的文件名将正确编译哪个类哪个不会。

长话短说: 不,你不能把两个公共类放在一个文件中,因为编译器无法正确处理。

(编辑:当然可以在与文件同名的一个公共类中定义新类。)