2012-09-13 15 views
5

Stavo confrontando i modificatori di accesso in Java e C#. Volevo trovare un'alternativa di C# protected internal in Java. Ma ho notato che il modificatore protected è diverso in entrambe le lingue (C# e Java). protected in Java è equivalente a protected internal di C# perché il membro è accessibile anche all'interno dello stesso pacchetto.Confusione relativa agli specificatori di accesso in Java e C#

Ho due domande

  • Perché hanno creato significati diversi per lo stesso modificatore in Java e C#?
  • Come posso avere protected di C# (L'accesso è limitato alla classe contenente o ai tipi derivati ​​dalla classe contenente.) in Java?

risposta

2

perché hanno creato significati diversi per lo stesso modificatore in Java e C# ?

Una scelta doveva essere fatta tra semplicità e la capacità di specificare con precisione i diversi diritti di accesso. Diverse scelte sono state fatte dai creatori di Java e (in seguito) dai creatori di C#.

Come ho protetta di C# (l'accesso è limitato alla contenente classe o tipi derivata dalla classe che contiene.) In Java?

Non è possibile. Java è più limitato su questo punto.

Ma si dovrebbe probabilmente limitare l'uso della parola chiave protected poiché in entrambi i casi si tratta di una rottura del principio generale di incapsulamento. Questo uso è a volte utile, poiché un linguaggio troppo rigido può significare un codice troppo inutile, ma attenzione a non creare qualcosa che sarà troppo legato e difficile da modificare e mantenere. Dare accesso a campi o metodi interni per sovrascrivere le classi spesso significa avere una gerarchia pesante con un eccessivo accoppiamento di implementazione (preferire la composizione su una gerarchia per la gestibilità).

Si noti che una variabile o un metodo dichiarato senza alcun modificatore del controllo di accesso è disponibile per qualsiasi altra classe nello stesso pacchetto. Secondo me, è più salutare che consentire l'accesso a sottoclassi di qualsiasi pacchetto.

Here's the complete grid:

enter image description here

+0

"fai attenzione a non fare qualcosa che sarà troppo legato e difficile da cambiare e mantenere". Non ho capito In che modo i modificatori hanno un ruolo in questo? – Shashwat

+0

Quando hai sottoclassi che accedono a un campo interno, hai un forte accoppiamento che vieta di cambiare l'implementazione della superclasse. Questo è uno dei problemi che l'incapsulamento aiuta a evitare. –

+0

Capito. Grazie :) – Shashwat

0

In Java documentazione delle API, l'accesso specificatore parola chiave non viene fornito da Sun.com. Prova questo esempio

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