2010-08-17 219 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。*)將始終具有優先級