【问题标题】:Is it possible to create multiple classes in one package and import them in another package?是否可以在一个包中创建多个类并将它们导入另一个包中?
【发布时间】:2015-12-17 17:18:59
【问题描述】:

您好,我有一个关于 Java 包的问题。我创建了一个包含多个类的包[包名是'animal',文件名是'Zoo.java']。我创建了另一个 java 文件,它位于另一个包“mypackage”中,并创建了一个名为“MAIN.java”的文件。我尝试从“MAIN.java”访问“动物”包的成员,它给我一个错误,因为它无法访问“动物”包的类。我知道只有在同一个包中的类才能相互访问,或者应该公开。但我只能在“Zoo.java”中将一个类更改为公共类。所以我找到了一种解决方案,它为动物包中的每个类创建单独的 java 文件并将其公开。还有其他方法吗?我的理解是,我们可以在一个文件中编写所有类并从任何地方导入它们。下面是我的截图。

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

【问题讨论】:

  • @SacJn OP 谈论的是包,而不是类中的成员 :)
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 提出这个问题的原因是 OP 无法访问不同包中类的变量。所以我放这个链接是为了让他知道,即使 OP 在两个不同的包中有类,成员也可以访问。从这个问题很明显,OP 不知道访问修饰符。

标签: java class import package


【解决方案1】:

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

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

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

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

我不确定您是从哪里获得这种理解的。要在其包之外使用类,它们必须是 public,而要成为 public,它们必须位于单独的文件中。

根据您对另一个答案的评论:

...在我的情况下,如果我在Zoo.java 中将Elephant 设置为public,那么我只能访问外部的特定类,而不是像FishBird 这样的其他类。

没错。如果您希望它们全部公开,而不是使用Zoo.java,使用Elephant.javaFish.javaBird.java

【讨论】:

    【解决方案2】:

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

    看到这个 Multiple classes in single file

    【讨论】:

    • 我知道,所以在我的情况下,如果我在 Zoo.java 中将 Elephant 设为公共,那么我只能访问该特定类之外的特定类,而不是 Fish 和 Bird 等其他类。
    • 没错!此外,一旦将 Elephant 设为公开,就必须将文件重命名为 Elephant.java。
    【解决方案3】:

    您还有另一种方法可以解决您的问题。您可以按如下方式使用内部类。

     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 文件并标记为公共。这是最好的方法。

    【讨论】:

      【解决方案4】:

      在这种情况下,您可以使用内部类。请参阅以下示例。 在这里,内部类可以从其他包中的类访问。

          public class Outer {        
            public class Inner {
            }
          }
      

      【讨论】:

        猜你喜欢
        • 2020-07-29
        • 1970-01-01
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多