2010-10-21 110 views
1

我想創建一個接口,其方法被保護或只對實現它的類可見。Java中受保護的方法?

問題是這樣的。我有兩個類或多或少做了完全相同的事情,但具有不同的參數和行爲,但它採取的實際步驟是相同的​​。

我在想好,我有兩個類似的類,所以我們只需創建一個接口,這兩個類都可以實現。應該沒事吧?好吧。它完成了這項工作,但有一個嚴重的缺陷,所有和我的意思是,現在在肉眼可以看到它在這兩類中被超越的所有方法。

它們可以按照「公共」的定義進行訪問。有封裝:(

我想到的另一種解決方案是使用抽象類,但等待,你只能擴展一個抽象類,我正在使用的兩個類已經擴展一個類(在我的情況下是一個Android服務類),所以

回答

3

如果您的兩個類都更好地擴展了服務類,那麼您將聲明一個抽象超類,它將擴展Service類。所以你看到你不必擔心繼承結構以及方法的可見性。

+0

我想我們可能會在這裏獲得冠軍。歡呼會給這個去 – jonney 2010-10-21 13:09:55

3

這是正確的,interface是類接口的定義,因此你不應該擔心實現的細節,比如接口是如何實現的,甚至不是被保護的方法。

在大多數情況下,這是通過使用抽象類來解決的。如果你的兩個實現已經擴展了另外兩個不同的類,那麼你可能需要「在代碼中重複一遍「。

雖然我不確定我在這裏瞭解您的問題。當你說這些類在許多方面表現相同時,我認爲你想在一個普通的超類中編寫這種行爲,對吧?但是如果你想把它放在一個普通的超類中,這兩個類必須擴展這個類。在那種情況下,你可以簡單地做這個超類抽象,如你所描述的,不是?我的意思是即使一個接口可以聲明受保護的方法,你仍然不能在這個接口中共享通用的實現部分。

+0

實現方式會有所不同,但實際的方法調用將完全相同,即理想使用接口。例如,我有一個名爲parseXML()的方法,這兩個類都需要解析一些xml數據,但兩者的xml方案不同 – jonney 2010-10-21 11:39:19

+3

「接口」描述了定義類接口的「public」方法,以供其他類使用。 ''接口'不適合你的用例 - 你試圖指定私有/受保護的實現細節。 – 2010-10-21 12:09:16

0

我不知道,你的問題statment是正確的:

我想確定我有兩個類似 類,以便讓剛剛創建 接口,這兩個類 實現。應該沒事吧?那麼它 是。它做的工作,但有一個嚴重的 缺陷,我和所有的 方法,它在這兩個 類現在是可見的裸體 眼睛。

您定義的接口是實現類的公共「面」。沒有要求接口以外的任何東西,而不是你想暴露給調用者的方法,這些可以合理公開。

那麼你的意思是「所有被覆蓋的方法」接口不會覆蓋任何東西,所以句子中的「it」是什麼。我沒有看到如何使用接口公開任何不需要暴露的東西。在概念標記接口保護意味着類本身可以看到方法。我不明白這有多大用處。

也許你關心什麼是接口。關鍵問題是誰在使用該接口。你可以聲明接口的默認訪問權限(既不是公共也不是私有的),因此限制在同一個包中的類。