【问题标题】:can i define more than one public class in a java package我可以在一个 java 包中定义多个公共类吗
【发布时间】:2018-07-23 16:46:08
【问题描述】:

我想创建一个包含一些类的 java 包。但是无法从包外部访问非公共类,所以我编写了这段代码并将其保存为 Box.java

package mypack;
public class Box
{
int length,breadth,height;
public Box(int l,int b,int h)
    {
    length=l;
    breadth=b;
    height=h;
    }
public  int vol()
    {
    return length*breadth*height;
    }
} 

public class circle
{
 int r;
 public circle(int rr)
    {
    r=rr;
    }
 public float area()
    {
    return (3.14f*r*r);
    }
 }  

是否可以创建这样的包。如果可能的话我应该给它什么文件名'Box.java'或'circle.java'

【问题讨论】:

  • 在一个包中,是的,只是不在一个 (.java) 文件中。它应该是 Box.java AND Circle.java
  • 规则很简单:1)一个.java文件中只能定义一个public类。但是许多.java 文件可以存在于一个包中。包是文件系统中的一个目录。 2) .java 文件应命名为 public classexact 名称,该名称在其中定义。 3).java文件中可以定义多个类,但public只能定义一个类。

标签: java class packages public


【解决方案1】:

包中可以有多个public 类,但每个公共类都需要在自己的.java 文件中声明。如果您希望将这些位于不同.java 文件中的public 类包含在同一个包中,只需将package mypack; 放在这些.java 文件的开头即可。这是一个例子,你应该如何命名这些文件:

  1. Box.java:

     package mypack;
     public class Box {...}
    
  2. Circle.java:

     package mypack;
     public class Circle {...}
    

请注意,文件应以包含在其中的public 类的名称命名(如果其中存在public 类)。

顺便说一下,请注意 Java 语言中的命名约定 - 它可能会在查看代码时节省您和其他人的时间 - 类名应该以大写字母开头,所以在您的情况下应该是 Circle 类和Circle.java,而不是circle 类和circle.java

【讨论】:

    【解决方案2】:

    您只能在源文件中创建一个 public 类型(如类/接口等),如下面的 Java 文档所述(重点是我的)。

    要创建包,请为包选择一个名称(命名 约定将在下一节中讨论)并放置一个包 包含该名称的每个源文件顶部的语句 类型(类、接口、枚举和注释类型) 您想要包含在包中的内容。 如果您将多种类型放在一个源文件中,则只能使用一种 public,并且必须与源文件同名

    我建议您阅读here,了解如何在 java 中创建和管理包和源/类文件。

    另外,请注意,您可以在单个源文件中包含多个非公共(默认访问)类型,如下所示:

    在您的 Circle.java 文件中:

    package mypack;
    
    class Box { //non-public (default) class
     //code for Box class
    } 
    
    public class Circle {//public class
      //code for circle class
    } 
    

    此外,在包中,您可以创建任意数量的public 类(遵循上述规则)。但是,作为一种好的做法,请根据相关性将您的类正确地分组到不同的包中。

    【讨论】:

      最近更新 更多