2012-09-13 21 views
5

我比較訪問修飾符混淆。我想在Java中找到替代C#的protected internal。但是我注意到protected改性劑是兩種語言(C#Java)不同。 protected在Java中相當於C#protected internal因爲成員得到相同的封裝內訪問過。關於Java訪問標識符和Java和C#C#

我有兩個問題

  • 爲什麼他們創造了在Java和C#不同的含義相同的修改?
  • 如何獲得C#的protected訪問權限僅限於從Java中包含的類派生的包含類或類型)?

回答

2

爲什麼他們創造了不同的含義在Java相同改性劑和 C#?

必須在簡單性和精確指定不同訪問權限的能力之間進行選擇。 Java的創建者和(後來)C#創建者做出了不同的選擇。

如何在Java中保護C#(訪問限於包含 的類或派生自包含類的類型)?

你不行。 Java在這一點上更加有限。

但你可能要限制你的protected關鍵字用作都使用它指的一般原則封裝斷裂。這種使用有時是有用的,因爲一個過於嚴格的語言可能意味着太多無用的代碼,但要注意不要把東西也會被捆綁,並努力改變和維護。對內部字段或方法進行訪問以覆蓋類通常意味着您有一個沉重的層次結構,其中包含太多的實現耦合(爲了可維護性,喜歡使用層次結構進行組合)。

注意,變量或方法沒有任何訪問控制修飾符聲明是提供給在相同的包中的任何其他類。在我看來,這比允許任何軟件包的子類訪問更爲安全。

Here's the complete grid

enter image description here

+0

「小心不要讓某些東西過於束縛,難以改變和維護」。我不明白。修飾語在這方面如何發揮作用? – Shashwat

+0

當你有子類訪問一個內部字段時,你有一個強大的耦合,禁止你改變超類的實現。這是封裝有助於避免的問題之一。 –

+0

明白了。謝謝 :) – Shashwat

0

在Java API文檔,關鍵字訪問說明符不被Sun.com提供。試試這個例子

D:\>javac Demo.java 
Demo.java:1: error: **modifier** private not allowed here 
private class Test 
     ^
1 error