同一个类可以存在于多个包中吗?
换句话说,我可以在 com.test.package1
和 com.test.package2
中有 Foo.java
类吗?
更新
现在我从包 1 复制类并放入包 2,现在我正在创建该类的一个实例,我希望这个实例指向包 1 中存在的类,但目前它指向包 1 路径,我怎么能修改它?
哦,所以我不能做这样的事情:
Foo = new Foo() // pointing to Foo class in package 1
Foo = new Foo() // pointing to Foo class in package 2
最佳答案
是的,您可以在多个包中拥有两个同名的类。但是,您不能使用两个 import
语句将两个类导入到同一个文件中。如果您确实需要引用这两个类名,则必须完全限定其中一个类名。
例子:假设你有
pkg1/SomeClass.java
package pkg1;
public class SomeClass {
}
pkg2/SomeClass.java
package pkg2;
public class SomeClass {
}
和Main.java
import pkg1.SomeClass; // This will...
import pkg2.SomeClass; // ...fail
public class Main {
public static void main(String args[]) {
new SomeClass();
}
}
如果你尝试编译,你会得到:
$ javac Main.java
Main.java:2: pkg1.SomeClass is already defined in a single-type import
import pkg2.SomeClass;
^
1 error
然而确实编译:
import pkg1.SomeClass;
public class Main {
public static void main(String args[]) {
new SomeClass();
new pkg2.SomeClass(); // <-- not imported.
}
}
关于java - 不同包中的相同类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4055634/