不同包中的相同类名

Rac*_*hel 18 java packages

多个包中是否可以存在相同的类?换句话说,我可以有dummy.javacom.test.package1com.test.package2

更新

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

哦,所以我做不了类似的事情:

Foo = new Foo() //pointing to 1 package Foo class
Foo = new Foo() // pointing to 2 package Foo class
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 38

是的,您可以在多个包中拥有两个具有相同名称的类.但是,您不能使用两个import语句在同一文件中导入这两个类.如果你真的需要引用它们,你必须完全限定其中一个类名.


示例:假设您有

则pkg1/SomeClass.java

package pkg1;
public class SomeClass {
}
Run Code Online (Sandbox Code Playgroud)

则pkg2/SomeClass.java

package pkg2;
public class SomeClass {
}
Run Code Online (Sandbox Code Playgroud)

Main.java

import pkg1.SomeClass;   // This will...
import pkg2.SomeClass;   // ...fail

public class Main {
    public static void main(String args[]) {
        new SomeClass();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你尝试编译,你会得到:

$ javac Main.java
Main.java:2: pkg1.SomeClass is already defined in a single-type import
import pkg2.SomeClass;
^
1 error
Run Code Online (Sandbox Code Playgroud)

但是这会编译:

import pkg1.SomeClass;

public class Main {

    public static void main(String args[]) {
        new SomeClass();
        new pkg2.SomeClass();   // <-- not imported.
    }
}
Run Code Online (Sandbox Code Playgroud)


whe*_*ies 5

可以,但是如果在其他包中调用它们,则在源文件中都包含了两者时,您就需要区分它们。

对评论的回应:

com.test.package1.Foo myFoo = new com.test.package1.Foo();
com.test.package2.Foo myOtherFoo = new com.test.package2.Foo();
Run Code Online (Sandbox Code Playgroud)