不同包中的相同类名

2022-09-01 12:43:28

同一类可以存在于多个包中吗?换句话说,我可以在 和 中上课吗?Foo.javacom.test.package1com.test.package2

更新

现在我从包1复制了类并放入包2,现在我正在创建该类的实例,我希望这个实例指向包1中存在的类,但目前它指向包1路径,我该如何修改它?

哦,所以我不能做这样的事情:

Foo = new Foo() // pointing to Foo class in package 1
Foo = new Foo() // pointing to Foo class in package 2

答案 1

是的,您可以在多个包中拥有两个同名的类。但是,不能使用两个语句在同一文件中导入这两个类。如果您确实需要同时引用其中一个类名称,则必须完全限定其中一个类名称。import


示例:假设您有

pkg1/某类.java

package pkg1;
public class SomeClass {
}

pkg2/某类.java

package pkg2;
public class SomeClass {
}

主.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.
    }
}

答案 2

当然可以,但是当在其他包中调用它们时,您需要区分想要哪一个,如果两者都包含在源文件中。

对评论的回应:

com.test.package1.Foo myFoo = new com.test.package1.Foo();
com.test.package2.Foo myOtherFoo = new com.test.package2.Foo();

推荐