Public vs Protégé
Je suis très confondre sur laquelle les classes composer de public
et protected
méthodes/variables.
Pourquoi seulement les classes peuvent accéder à protected
méthodes/variables? Peut quelqu'un d'autre peut m'aider à éclairer la différence entre public
et protected
et ses fonctionnalités.
Dans lequel le langage de programmation?
Vous n'avez pas spécifié de quelle langue vous parlez - et le "pourquoi" est fondamentalement probablement répondre par "parce que c'est ce que la norme dit:"... vous devez préciser votre question.
Le langage de programmation n'a pas d'importance. Une propriété publique sera disponible en dehors de la classe. Un bien protégé ne sera pas disponible en dehors de la classe, mais seront disponibles dans les classes enfant. De même, avec des méthodes, et c'est une voie dans laquelle la programmation orientée objet de la programmation de travaux. Lire plus sur la programmation orientée objet sur google.
Le principe général peut être similaire, mais il y a peut-être bien spécifiques des différences sémantiques entre différentes langues.
Il en fait plus robuste de codage, si vous voulez la réponse courte. La réponse longue, veuillez lire la programmation orientée objet matériel sur google.
Vous n'avez pas spécifié de quelle langue vous parlez - et le "pourquoi" est fondamentalement probablement répondre par "parce que c'est ce que la norme dit:"... vous devez préciser votre question.
Le langage de programmation n'a pas d'importance. Une propriété publique sera disponible en dehors de la classe. Un bien protégé ne sera pas disponible en dehors de la classe, mais seront disponibles dans les classes enfant. De même, avec des méthodes, et c'est une voie dans laquelle la programmation orientée objet de la programmation de travaux. Lire plus sur la programmation orientée objet sur google.
Le principe général peut être similaire, mais il y a peut-être bien spécifiques des différences sémantiques entre différentes langues.
Il en fait plus robuste de codage, si vous voulez la réponse courte. La réponse longue, veuillez lire la programmation orientée objet matériel sur google.
OriginalL'auteur Bryan | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
Parce que c'est le définition de "protégés". Le domaine de l'accessibilité d'un membre protégé est la classe et de ses classes dérivées.
Peut-être vous avez l'intention de demander:
C'est compliqué. Pour une explication détaillée, voir ma série en six parties "Pourquoi ne puis-je pas accéder à un membre protégé à partir d'une classe dérivée?"
http://blogs.msdn.com/b/ericlippert/archive/tags/protected/
OriginalL'auteur Eric Lippert
Bien, pourquoi ils le font, c'est parce que c'est tout simplement ce qu'ils sont pour. Je pense que peut-être vous vous demandez pourquoi on pourrait vouloir. La réponse est simple, parce que les classes dérivées doivent y avoir accès, et à l'extérieur des classes ne pas.
Modificateurs d'accès (ainsi que
public
etprotected
, il y aprivate
,internal
etprotected internal
) sont un moyen de garder le code compréhensible que possible afin de réduire les erreurs.Il y a des langues sans aucune forme d'encapsulation. Dans leur forme la plus extrême, le code peut changer n'importe quel morceau de données. Une discipline codeur permettra de réduire le nombre de places d'un type de données est manipulé, mais il peut toujours pas être évident tous les combinaisons d'opérations qui pourraient laisser des objets* dans des états différents. La situation s'aggrave lorsque leur code est ensuite utilisé comme une partie de quelqu'un d'autre code.
Modificateurs d'accès de nous aider à faire face à cela. Nous avons par défaut de l'avoir privée des membres. Alors le seul endroit où les membres peuvent être consultées à l'intérieur de la classe elle-même. Cela signifie:
Cela le rend beaucoup plus facile pour nous de code bien.
Bien sûr, une classe où tout est privé n'est pas très utile. Nous avons généralement de laisser certains membres du public. En règle générale, nous avons nos champs privés, quelques méthodes utiles privé, et puis certains publics, des méthodes et des propriétés de l'utiliser. Nous pouvons tout de même examiner toutes les manipulations possibles sur les membres privés par l'examen d'une seule classe, mais nous avons ouvert appelant les membres qui le font pour d'autres classes. En tant que tels, ces membres de nous donner l'interface entre le code à l'intérieur et à l'extérieur de la classe, de la frontière à travers laquelle nous protégeons l'état de la classe à partir d'erreur tout en offrant des fonctionnalités utiles à d'autres codes.
Il devrait être clair maintenant que nous ne faisons pas quelque chose de public, à moins que nous avons besoin, mais nous devons pour le travail utile pour être possible.
Faire un membre protégé nous donne un terrain d'entente. Nous sommes encore en réduisant les endroits, quelque chose peut être manipulé, mais pas aussi fortement. Généralement, ceci est fait de sorte qu'une classe dérivée peut fournir son propre mécanisme pour un général de l'interface définie dans la base.
Il y a moins de cas où il est utilisé, parce que, normalement, nous pouvons garder les choses privées - ce qui est plus sûr - ou à être public pour être utile. L'un des cas les plus courants, sont ceux où le public et les membres fournissent des fonctionnalités de protection et de définir les moyens à mettre en œuvre. Par exemple
HttpEncoder
fournit plusieurs méthodes pour régler le problème de l'encodage des chaînes de caractères pour le code HTML, mais il y a deux protégés méthodes abstraites que les classes dérivées remplacer pour fournir les fonctionnalités communes aux différentes méthodes. En dehors de classes n'ont pas besoin d'accéder à ceux-ci, mais les classes dérivées ne.Un exemple pratique. Disons que nous avons une classe de base qui implémente
INotifyPropertyChanging
. Cette interface signifie qu'il doit garder la trace dePropertyChangingEventHandler
gestionnaires, et de déclencher des événements lorsqu'une propriété est sur le point de changer.Nous ne voulons pas en dehors des classes de soulever ce cas, parce que c'est pas de leurs affaires et de les avoir faites c'est juste le résultat d'erreurs.
Nous devons laisser les classes dérivées de le faire, parce qu'ils peuvent définir leurs propres propriétés de la classe de base ne connaît pas.
Par conséquent, nous définissons une méthode protégée dans cette classe de base qui déclenche l'événement. En dehors des classes ne peut pas l'appeler (réduction du risque de celui-ci étant appelé à tort), mais les classes dérivées peuvent (capacité à faire le travail qu'ils doivent faire).
*Les gens de l'orienté objet en arrière-plan pourrait ne même pas envisager de tels ensembles de données pour être des "objets".
OriginalL'auteur Jon Hanna
J'ai aussi été confondu par
public
etprotected
.Un
protected
variable (ou une méthode) ne peut PAS être accessible à partir d'une instance (créé avecnew
); il ne peut être accessible à partir d'une sous-classe qui étend la super-classe (extended avecextends
).Ce Java-comme exemple devrait permettre de clarifier la différence.
OriginalL'auteur tfmontague
En supposant que c'est dans le contexte de Java comme langage.
public
- peut être consulté à partir de n'importe quel classeprotected
- peut être accessible à partir d'un sous /classe dérivée seulementOriginalL'auteur Suminda Sirinath S. Dharmasena