2012-02-25 40 views
9

我一直在使用android幾年,現在還沒有一個老師或任何人告訴我該怎麼做。 這整段時間我都想知道這件事。在Java中,當你有一個未指定可見性關鍵字的方法時會發生什麼?

當你有一個方法,我一般看到...

public void method(){ 
//Stuff 
} 

private void method(){ 
//stuff 
} 

我知道一個空是沒有返回值的方法,那就是公衆的知名度在方式方法,但它會問題,如果我只是用這樣的事情...

void method(){ 
//stuff 
} 

因爲這時甲基無論如何,ods可見度只是默認值?

我不知道我是否正確,指定「公共」還是「私人」只是一個好習慣?

+1

我不確定我是否理解這個問題。如果你想讓這個方法公開,你需要指定public。如果你希望它是私人的,你需要指定私人。如果你想要默認的(即包可見性),你什麼都不指定。 – sepp2k 2012-02-25 06:37:09

回答

17

不指定任何有特定的含義:

  • public - 任何類可以訪問此構件
  • protected - 子類可以在同一個類或在同一個包訪問此構件(以及代碼)
  • private - 只能在同一類的代碼可以訪問此成員
  • 沒有(「默認」訪問) - 僅在同包代碼可以ACC ess this member

可以說,最後一個案例應該有自己的關鍵字,但我們現在堅持使用它。除非你真的想要使用默認的可見性,否則沒有指定任何東西是很糟糕的形式 - 你是否真的需要包的可見性出於某種原因,或者你只是默認爲所有東西打包可見性?最佳做法是爲非公衆成員明確使用private,除非您需要其他人之一。

+0

Nah,我真的不知道,是不是我懶惰或什麼,謝謝你,我只是想知道最好的做法,我會在9分鐘內接受答案 – FabianCook 2012-02-25 06:40:46

+1

@SmartLemon,我沒有真正指責你是懶惰的,只是有人在閱讀你的代碼後不會立即知道你是否意圖擁有軟件包可見性,如果你只是默認使用它的話:) – bdonlan 2012-02-25 23:02:55

+1

嚴格地說,這個答案實際上並不正確。受保護的手段比這更多。每個級別都是前一個嚴格的超級集合,這意味着受保護的方法可以由兩個子類使用,也可以由同一個包中的其他代碼使用。 – 2012-02-25 23:12:00

6

Java有四個級別的可見性:public,protected,(default),private。這些含義如下:

  1. public - 使您的方法可以被任何其他類訪問。
  2. 保護 - 使您的方法可以在同一包中的任何類或您班的任何子類訪問。
  3. (默認值,即無修飾符) - 使您的方法只能訪問同一包中的類。
  4. private - 使您的方法只能訪問當前類。

當在類,方法和字段上指定訪問修飾符時,同樣的規則適用。

6

的Java有四個級別的可見性:公有,保護(默認),私人

  1. 可見的包。默認。不需要修飾符。
  2. 僅對班級可見(私人)。
  3. 可見世界(公衆)。
  4. 可見包和所有子類(受保護)。

enter image description here

默認訪問修飾符 - 無關鍵字:

默認訪問修飾符意味着我們不顯式聲明的訪問修飾符 一類,字段,方法等

沒有任何訪問控制修飾符聲明的變量或方法是 可用於任何其他類在同一個包裏。默認修飾符 不能用於接口中的方法和字段。

私人的訪問修飾符 - 私人:

方法,變量和構造函數被聲明爲private只能 聲明的類本身中進行訪問。

私人訪問修飾符是限制最多的訪問級別。類 和接口不能是私有的。

如果公開的getter方法存在於類中,則可以在類 之外訪問聲明爲private的變量。

使用私有修飾符是對象封裝 本身並隱藏外部數據的主要方式。

公共訪問修飾符 - 大衆:

類,方法,構造器,接口等聲明爲public可以 自其他類訪問。因此,可以從屬於Java Universe的任何類 訪問在公共類中聲明的字段,方法,塊 。

但是,如果我們嘗試訪問的公開課程位於不同的 包中,則仍然需要導入公共類。

由於類繼承, 類的所有公共方法和變量均由其子類繼承。

保護訪問修飾符 - 保護:

變量,這些變量在 父類的保護方法和構造函數只能由其他軟件包或 包中的任何類的子類訪問的受保護成員班級。

受保護的訪問修飾符不能應用於類和 接口。方法,字段可以聲明爲protected,但方法 和接口中的字段不能聲明爲protected。

受保護的訪問使子類有機會使用助手方法 或變量,同時防止非相關類嘗試使用 它。

相關問題