Java 一个文件中有两个类

Java 一个文件中有两个类,java,Java,我正在准备OCA Java 8认证考试 书中说: 如果您有一个公共类,它需要匹配文件名。公众的 类animal2不会以文件名Animal.java编译。样本 代码是: 但是,如果我创建一个名为“Animal.Java”的Java文件,我将代码放入其中并对其进行编译,编译器将生成两个Java类,“Animal.class”和“animal2.class” 学习指南错了吗?好的,好的 我现在明白了,这本书把我弄糊涂了 这将编译并生成两个类(一个公共类动物,一个受保护类动物2): 本文件未编译: pu

我正在准备OCA Java 8认证考试

书中说:

如果您有一个公共类,它需要匹配文件名。公众的 类animal2不会以文件名Animal.java编译。样本 代码是:

但是,如果我创建一个名为“Animal.Java”的Java文件,我将代码放入其中并对其进行编译,编译器将生成两个Java类,“Animal.class”和“animal2.class”

学习指南错了吗?

好的,好的

我现在明白了,这本书把我弄糊涂了

这将编译并生成两个类(一个公共类动物,一个受保护类动物2):

本文件未编译:

public class Animal{
private String name;
}
public class Animal2{

}

基本上,这本书是说,如果一个文件名为Animal,那么公共类也必须名为Animal,否则,就会出现错误

class Animal2
不是公开的,这就是为什么它编译得很好

您可以在公共类中创建一个公共类:

public class Animal{

    public class Animal2{
        ...
    }

    ...

}
这是不可能的:

public class Animal{
      ....
}

public class Animal2{
      ....
}

Animal2
不是公共类。“Java提供了一个默认说明符,在没有访问修饰符的情况下使用。没有声明访问修饰符的任何类、字段、方法或构造函数只能由同一包中的类访问。默认修饰符不用于接口中的字段和方法。”。这实际上并没有回答这个问题。是的,在java文件中只能有一个公共类,并且公共类的名称必须与java文件名匹配。
public class Animal{

    public class Animal2{
        ...
    }

    ...

}
public class Animal{
      ....
}

public class Animal2{
      ....
}