是否可以在一个包中创建多个类并将它们导入另一个包中?

时间:2015-09-21 05:25:37

标签: java class import package

您好我对Java Package有疑问。我创建了一个包含多个类的包[包名是' animal'和文件名是' Zoo.java']。我创建了另一个java文件,该文件位于另一个包' mypackage'并创建了一个名为' MAIN.java'的文件。我试过访问动物的成员'包装来自' MAIN.java'它给我一个错误,因为它无法访问“动物”的类别。包。我知道只有同一个包中的类应该可以互相访问,或者它应该是公开的。但我只能在Zoo.java'中将一个班级改为公开。所以我找到了一个解决方案,为动物包中的每个类创建单独的java文件,并将其公之于众。还有其他方法吗?我的理解是,我们可以在一个文件中编写所有类,并从任何地方导入它们。以下是我的截图。 enter image description here

还有一件事,在java库中它们是如何实现的呢?包中每个类的单独源文件?

4 个答案:

答案 0 :(得分:2)

  

所以我找到了一个解决方案,为动物包中的每个类创建单独的java文件,并将其公之于众。

如果你想使用它们所定义的包之外的类,是的,它们必须是public。并且只有public部分可以访问,除了子类,它们也可以访问它们的protected部分。 More in this tutorial.

是的,给定文件中只能有一个public类(文件的名称必须与public类的名称相匹配)。在Java中,无论如何我们倾向于这样做。它有助于避免文件变得庞大且难以使用。

  

还有其他方法吗?我的理解是,我们可以在一个文件中编写所有类,并从任何地方导入它们。

我不确定你从哪里得到这种理解。要在他们的包之外使用类,它们必须是public,并且要public,它们必须位于不同的文件中。

根据您对其他答案的评论:

  

...就我而言,如果我在Elephant中将public设为Zoo.java,那么我只能访问该特定类,而不是Fish和{{1}之外的其他类}}

右。如果您希望所有内容都公开,而不是Bird,请Zoo.javaElephant.javaFish.java

答案 1 :(得分:0)

在一个JAVA文件中可以有多个类,前提是只有一个类被公开。

看到这个 Multiple classes in single file

答案 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 {
      }
    }