2011-02-14 72 views
3

我對默認包有問題。 基本上我的項目結構由三個主類組成,這三個主類在一個叫做模擬的包中擴展了一個抽象類。 昨天我在項目中做了一個名稱更改,現在我的三個主類自動放入默認包中,所以它們不能被仿真包中的類看到,反之亦然。 對於下面的代碼無法訪問默認包中的類

import simulation.*; 

class SSQSim extends Simulation{ 

} 

我得到這些錯誤 「這個類必須實現繼承的抽象方法Simulation.stop(),但不能覆蓋它,因爲它是不是從SSQSim可見。要麼使抽象類型或使繼承的方法可見「 」類型模擬不可見「

在此先感謝您。

編輯 問題是我不必使用任何其他軟件包。這基本上是家庭作業,提交規則非常嚴格:首先,我必須提交包含抽象類「模擬」的包「模擬」,並使用其他類的幫助來實現某些方法。這部分沒有問題。

然後,我必須創建三個類,它們導入包「模擬」並擴展它的類「模擬」。他們明確表示不要將這些類放在任何包中。起初,他們都運行良好,但在我重命名項目後。這些類突然進入默認包,現在他們給我這些錯誤。

+3

作爲一般規則,不要使用默認包。 – 2011-02-14 15:11:21

+0

是默認包中的`SSQSim`嗎? (是你提供完整文件的酸碼嗎?) – aioobe 2011-02-14 15:11:49

+0

那麼你的問題是什麼? – 2011-02-14 15:14:44

回答

1

你是如何創建你的課程?當您創建一個新類時,Eclipse將顯示一個New Java Class對話框。此對話框讓你選擇在創建新的類,它包:

enter image description here

只要按一下按鈕,Browse,你就可以選擇一個包。

enter image description here no i do not like image descriptions >:(

0

這是因爲Simulation.stop()方法的簽名提到了一些封裝受限(非公開)到simulation包的類。

您可以通過兩種

  1. 移動SSQSimsimulation包解決它,所以它可以訪問相同的類作爲Simulation,或
  2. 使延長Simulation類包公開所需的類。

從一個包將類移動到另一個在蝕,就可以簡單地拖動源代碼文件到所需的包,並蝕將相應地重構代碼。


(A側面說明:作爲一個經驗法則,不要使用默認的包,你跑進然而,問題,即使你避免默認包發生!)

1

爲什麼使用默認的包,從Java規格:

It is a compile time error to import a type from the unnamed package. 

所以,你必須創建一個新包使用不同的名稱,並添加您的類或把它們放在同一個包中的類,並做必要的進口。

0

這只是一個暗示,因爲所有類的源代碼都沒有發佈。錯誤消息意味着在父類中存在抽象方法,由於子類中可見性的丟失而無法重寫。通常,這是由於使用默認訪問說明符(「friendly」)或私有訪問說明符(這是無意義的,特別是在方法被聲明爲抽象的情況下)。必須在父級上使用受保護的訪問修飾符,以確保該方法現在對所有子類都可見,而不管它們是否存在於同一個包中。簡而言之,如果孩子不能「看到」被重寫的方法,那麼編譯器會發出一個警告,通知有關不可避免地推斷在父代或孩子中定義的方法是否應該在運行時使用的警告。

就Eclipse在默認包中創建類的行爲而言,可以始終確保在適當的對話框中創建新類時指定包(包含新包的Java類對話框)。

相關問題