java中的子包

时间:2017-01-04 12:43:19

标签: java

我在java中有三个程序。

//save on class ClassP1.java
package m1;
public class ClassP1{
    public void show1(){
        System.out.println("Welcome to package");
    }
}

//save on class ClassP2.java
package m1.m2;
public class ClassP2{
    public void show2(){
        System.out.println("Welcome 2 package");
    }
}

//save on class ClassP4.java
import m1.m2.*;
class ClassP4{  
  public static void main(String args[]){  
   System.out.println("subpackage");  
   ClassP2 p=new ClassP2();
   p.show2();

   m1.ClassP1 p1=new m1.ClassP1();
   p1.show1();
  }  
}

最后一个程序ClassP4.java正在导入m1.m2中的所有类。除非我将第5行编辑为m1.m2.ClassP2 p=new m1.m2.ClassP2();,否则会出错 为什么导入不起作用?

enter image description here

3 个答案:

答案 0 :(得分:1)

import m1.m2.*仅导入该直接包中的类(在这种情况下为ClassP2),因为您的ClassP1位于不同的包(m1)中。

为了完成这项工作,您有两个选择:

  1. ClassP1放在与' ClassP2'相同的包装中并使用通配符(*)表示法导入该包。

  2. 除了class ClassP4之外,
  3. import m1.m2.*;以上还添加了import m1.*;

答案 1 :(得分:1)

这些包在Java程序中定义了一个结构,该结构也反映在目录树中源文件(* .java)的位置,一旦它们被编译成类文件。

您的ClassP4位于默认包中,因为它没有package语句。因此,此类位于源树的根目录中。然后有一个类ClassP1,它位于包m1中,因此应该位于相对于默认包的子文件夹m1中。与ClassP2类似,属于包m1.m2,并且必须位于相对于默认包的目录m1/m2中。这将为您提供以下结构:

 / ClassP4.java
 +- m1
    / ClassP1.java
    +- m2
    / ClassP2.java

此外,在ClassP4中,您只能导入包m1.m2中的所有内容,但不会导入m1中的任何内容。

答案 2 :(得分:0)

我认为如果您使用以下任何内容,它将会起作用:

  1. 将ClassP4添加到m1包中

  2. 在ClassP4包中使用import m1。*;