您好我对Java Package有疑问。我创建了一个包含多个类的包[包名是' animal'和文件名是' Zoo.java']。我创建了另一个java文件,该文件位于另一个包' mypackage'并创建了一个名为' MAIN.java'的文件。我试过访问动物的成员'包装来自' MAIN.java'它给我一个错误,因为它无法访问“动物”的类别。包。我知道只有同一个包中的类应该可以互相访问,或者它应该是公开的。但我只能在Zoo.java'中将一个班级改为公开。所以我找到了一个解决方案,为动物包中的每个类创建单独的java文件,并将其公之于众。还有其他方法吗?我的理解是,我们可以在一个文件中编写所有类,并从任何地方导入它们。以下是我的截图。
还有一件事,在java库中它们是如何实现的呢?包中每个类的单独源文件?
答案 0 :(得分:2)
所以我找到了一个解决方案,为动物包中的每个类创建单独的java文件,并将其公之于众。
如果你想使用它们所定义的包之外的类,是的,它们必须是public
。并且只有public
部分可以访问,除了子类,它们也可以访问它们的protected
部分。 More in this tutorial.
是的,给定文件中只能有一个public
类(文件的名称必须与public
类的名称相匹配)。在Java中,无论如何我们倾向于这样做。它有助于避免文件变得庞大且难以使用。
还有其他方法吗?我的理解是,我们可以在一个文件中编写所有类,并从任何地方导入它们。
我不确定你从哪里得到这种理解。要在他们的包之外使用类,它们必须是public
,并且要public
,它们必须位于不同的文件中。
根据您对其他答案的评论:
...就我而言,如果我在
Elephant
中将public
设为Zoo.java
,那么我只能访问该特定类,而不是Fish
和{{1}之外的其他类}}
右。如果您希望所有内容都公开,而不是Bird
,请Zoo.java
,Elephant.java
和Fish.java
。
答案 1 :(得分:0)
在一个JAVA文件中可以有多个类,前提是只有一个类被公开。
答案 2 :(得分:0)
您还有另一种方法可以解决您的问题。你可以使用内部类。
package animals;
public class Elephant {
public static class Fish{
public void print(){
System.out.println("test");
}
}
}
并在主程序包中:
package main;
import animals.Elephant;
public class Main {
public static void main(String[] args) {
Elephant.Fish fish = new Elephant.Fish();
fish.print();
}
}
但不推荐设计。如果需要设计,请定义单独的java文件并标记为public。这是最好的方式。
答案 3 :(得分:0)
在这种情况下,您可以使用内部类。请参阅以下示例。 这里可以从其他包中的类访问内部类。
public class Outer {
public class Inner {
}
}