2012-02-22 72 views
0

在java中,我們是否真的必須這樣做才能使我們的變量或方法公開?例如:public或nothing

void aaa() { 
... 
} 

public void aaa() { 
... 
} 

如果是必須的,爲什麼呢?

+0

我不確定你的問題是什麼。如果你想要一個方法是公開的,你必須聲明它是公開的。默認情況下,它將具有默認(包)訪問權限。 – DNA 2012-02-22 17:06:33

+4

[在Java中,public,default,protected和private有什麼區別?](http://stackoverflow.com/questions/215497/in-java-whats-the-difference-between-public-default - 保護和私人) – 2012-02-22 17:08:20

+1

@RobHruska我認爲你沒有明確表示我的問題。請付出努力的解決方案,而不是調查一些重複 – El3ctr0n1c4 2012-02-22 17:22:36

回答

11

那麼這不是一個變量,這是一種方法 - 但是,你必須這樣做才能公開一個方法。如果你沒有,它的默認包訪問,並將不能從其他包訪問。您應該自己判斷您編寫的任何特定方法是否只能在同一個類中訪問(使其爲private)爲子類(使其爲protected)才能訪問該包(保留缺省值;不能明確指出包訪問)或一切(使其成爲public)。

(這是訪問修飾符略有簡化,但它是一個開始。)

至於爲什麼這種情況 - 通常你應該限制的知名度,使您的類型只公開方法這實際上對於它試圖封裝的概念是有意義的。你可能有更多的私有方法是特定於實現的,而外部世界不應該知道或關心的。

+0

非常具有說服力,謝謝.. – El3ctr0n1c4 2012-02-22 17:09:16

+4

@Downvoter:小心評論? – 2012-02-22 17:11:18

+2

@JonSkeet我認爲人們有時候投票你的答案來檢查Stackoverflow的投票功能是否適用於你的答案! – 2012-02-22 20:04:57

1

這兩種方法是不同的:第一種具有包可見性,而第二種是公開的。

區別在於,軟件包可見方法在同一個軟件包內的方法中只出現在公共方法,而公共方法對於軟件包內部和外部的所有方法都是可見的。

所以你的問題的答案取決於你的意圖:如果你的方法真的是你的組件的接口的一部分,使其私人;如果它僅用於包裝內部,請將其保留在默認包裝可見性範圍內。

0

在您的第一個示例中,該方法將是包作用域 - 即只有同一包中的東西纔可以使用它。所以是的,你確實需要聲明公共的字段/方法/類,否則它們將會有包的範圍。

0

我認爲這是假設公衆Java,所以它是不是真的required.If你開始有publicprotectedprivate投在一個類的組合,它是更容易看到該方法可能具有的範圍。

5

You can ommmit access level keyword

你可以在任何地方ommmit訪問級別修飾符除了靠近主要方法。它必須設置爲公開。