2010-08-17 251 views
1

假设我们有一个名为com.example1的软件包,其中包含一个Hello类(以及其他类)。解决软件包冲突

然后我们有另一个包com.example2也包含Hello类(显然有不同的行为)。

现在假设我们需要在每com.example1类和com.example2 Hello类

import com.example1.*; 
import com.example2.Hello; 

哪一个被调用在这种情况下?

Hello hello = new Hello(); 

或者这是否会产生编译错误?

出于好奇,这只是一个理论问题。

由于创建了包以避免命名冲突,因此当两个包包含两个具有相同名称的类时会发生什么情况?

回答

5

它会给编译错误。你必须明确地命名这个类 - com.example2.Hello hello = new com.example2.Hello();

+0

那么导入它没有意义? – 2010-08-17 10:41:06

+0

@klez是的,但是为了清楚起见,您可以保留导入 - 只需从'java'文件顶部导入类的位置即可看到。 – 2010-08-17 10:42:33

2

而不是把它放在偶然的位置,最好是在你的声明中明确。这是一个编译错误。

类似的冲突经常发生在java.util.Listjava.awt.List。如果你是明确的,那就没有混淆。

+0

java.awt.List碰撞让我感到沮丧,从我的本地开发JRE中移除它。 – mdma 2010-08-17 13:28:14

0

它不会像其他用户所述的编译器错误。它将使用com.example2.Hello。这是因为显式导入(com.example2.Hello)通过* import(com.example1。*)将始终具有优先级