2011-10-26 35 views
3

我正在尋找特定的確切規則來確定如何聲明方法的可見性。這不是語言不可知的,它適用於標準的OOP語言。何時聲明方法爲私有

+0

你的意思是它*是*語言不可知的,但不是語言特定的。 – mloskot

+0

你能選擇一個答案嗎? – hunter

回答

4

一個很好的規則遵循是:

成員不應該有更多的可訪問性比他們的需要。

private開始,並根據需要使它們更易於訪問。

+0

+1,但是你從哪裏引用?我很想看看上下文和文章的其餘部分。 – Yuck

+0

我剛剛做了它,但我確定它之前已經說過 – hunter

+1

是的,但成員可能已經被錯誤地定義爲面向對象(例如:一個巨大的類處理多重關注)。 – Zombies

1

基本上:

  • 公共是當該方法必須是可訪問由外部類。像getState()就可以放在這裏。
  • 私人是當該方法不應該被任何其他類訪問,如changeState(...)。通常這涉及對象內容的實際改變 - 也許你會有一個公開的setX(int x),只是調用私人setXInternal(int x),這樣你可以有額外的類型檢查/安全/等等。爲了安全起見,你可能會把所有事情都變成私有的,直到它必須以其他方式。
  • 受保護的基本上是「公立幼兒班,否則私人」。可以去任何一個方面。
0

任何一種不直接定義特定對象行爲但在對象行爲實現過程中很有用的操作是私有成員函數的候選。

1

對於任何類/對象有:
1.東西它(的行爲)
2.它是如何做他們(實現)

世界關心你的對象的行爲。它不應該(經常)關心它如何在引擎蓋下實現這種行爲。保持實現細節私密,並暴露行爲。

0

我認爲公共,受保護和私人關鍵字的幫助只是爲了讓代碼更清晰。

所以你可以使用public來作爲一個類的API,private可以說明如何不擴展一個類並在其他情況下保護它。

一個共同的務實方法是從來沒有使用私人,只使用公共或受保護。

0

作爲公共API的一部分的事物公開。
保護您希望子類能夠調用的非公共功能。
私人,如果你不希望子類與所述方法(或甚至知道它的存在)混在一起。

在C,C++和C#中,如果您希望子類能夠覆蓋它,則不會忘記標記虛擬方法。