我在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();
,否则会出错
为什么导入不起作用?
答案 0 :(得分:1)
import m1.m2.*
仅导入该直接包中的类(在这种情况下为ClassP2
),因为您的ClassP1
位于不同的包(m1)中。
为了完成这项工作,您有两个选择:
将ClassP1
放在与' ClassP2'相同的包装中并使用通配符(*)表示法导入该包。
class ClassP4
之外, 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)
我认为如果您使用以下任何内容,它将会起作用:
将ClassP4添加到m1包中
在ClassP4包中使用import m1。*;