2009-08-29 52 views
10

如果我有一個java包,它是package-private(用「class」聲明,而不是「public class」),如果裏面的方法聲明爲public或protected或者package-private,那麼真的沒有區別嗎?那麼我應該使用哪一個,或者什麼時候應該使用哪個?我有點困惑。Java - 包私有類中的方法可訪問性?

回答

18

如果我有一個Java類是包私有的(以「類」,而不是「大衆級」聲明),確實沒有區別,如果方法內聲明公共或保護或包私有,對?

好吧,也許不會立即。但是,如果您(或將來)宣佈從包私有類繼承的「受保護」或「公共」類,那麼原始類的成員的可見性會做的事。

正如@kmccoy指出的那樣,將該類聲明爲final可以刪除子類的可能性。

但這真的只是裝飾窗戶。如果您決定確實需要創建子類,則只需刪除final ...然後回到訪問修飾符的選擇非常重要的情況。

IMO,底線是你應該選擇最合適的修飾符...即使現在沒有必要。如果沒有別的,你選擇的修飾符應該記錄你的意圖,即抽象邊界在哪裏。

+0

如果該類是「final class SomeClass」,那麼成員可見性是否有關係? – kmccoy 2011-03-10 13:12:12

+2

如果在將來的某個重構中刪除最終修飾符:)請記住,這是軟件,「final」並不意味着「set in stone never to change」,它表示「不能從該類型派生子類,因爲它被寫入馬上。」 – 2011-03-10 22:23:55

4

包類中的公共方法對同一包中的類是公共的。但是,私有方法不能被同一個包中的類訪問。