簡體   English   中英

無法訪問默認包中的類

[英]Can't access Classes in default package

我的默認包有問題。 基本上我的項目結構包含三個主要類,它們在一個名為simulation的包中擴展一個抽象類。 昨天我在項目中進行了名稱更改,現在我的三個主要類自動放入默認包中,因此模擬包中的類無法看到它們,反之亦然。 對於以下代碼

import simulation.*;

class SSQSim extends Simulation{

} 

我得到這些錯誤“這個類必須實現繼承的抽象方法Simulation.stop(),但不能覆蓋它,因為它在SSQSim中是不可見的。要么使類型抽象,要么使繼承的方法可見”“模擬類型不可見“

先感謝您。

編輯問題是我不必使用任何其他包。 它基本上是家庭作業,提交的規則非常嚴格:首先,我必須提交包含抽象類“模擬”的“模擬”包,並在其他類的幫助下實現一些方法。 這部分很好。

然后,我必須創建三個類導入包“simulation”並擴展其類“Simulation”。 他們特意說不要把這些類放在任何包中。 起初,他們都運行良好,但在我重新命名該項目之后。 這些類突然進入默認包,現在他們給了我這些錯誤。

為什么使用默認包,來自java規范:

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

因此,您必須創建一個具有不同名稱的新包,並添加您的類或將它們放在與您的類相同的包中,並執行所需的導入。

你是如何創建課程的? 創建新類時,Eclipse將顯示“ New Java Class對話框。 此對話框允許您選擇在以下位置創建新類的包:

在此輸入圖像描述

只需單擊“ Browse按鈕,您就可以選擇一個包。

在這里輸入圖像描述我不喜歡圖像描述> :(

這是因為Simulation.stop()方法的簽名提到了一些對simulation包具有包限制(非公共)的類。

你可以解決它

  1. SSQSim移動到simulation包,以便它可以訪問與Simulation相同的類,或
  2. 制作擴展Simulation類包 - public所需的類。

要在eclipse中將類從一個包移動到另一個包,只需將源代碼文件拖到所需的包中,eclipse就會相應地重構代碼。


(附注:根據經驗,不要使用默認包。但是,即使您避開默認包,也會遇到問題!)

這只是一個提示,因為所有類的源代碼都沒有發布。 該錯誤消息暗示父類中存在抽象方法,由於子類中的可見性丟失而無法覆蓋該抽象方法。 通常,這是由於使用了默認訪問說明符(“友好”)或私有訪問說明符(這是沒有意義的,特別是如果該方法被聲明為抽象)。 必須在父級上使用受保護的訪問修飾符,以確保該方法現在對所有子類都可見,而不管它們是否存在於同一個包中。

簡而言之,如果孩子無法“看到”正在被覆蓋的方法,那么編譯器會發出一個警告,告知必須推斷出父或子中定義的方法是否應該在運行時使用。

就Eclipse在默認包中創建類的行為而言,可以始終確保在相應的對話框中創建新類時指定包(新的Java類對話框,其中包含包字段)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM