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:

fonte
2012-09-13 07:06:32
"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
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. –
Capito. Grazie :) – Shashwat