J'ai cherché et je connais la différence théorique.
- public - N'importe quelle classe/fonction peut accéder à la méthode/propriété.
- protected - Seule cette classe et ses sous-classes peuvent accéder à la méthode/propriété.
- private - Seule cette classe peut accéder à la méthode/propriété. Elle ne sera même pas héritée.
Tout cela va bien, mais la question est, quelle est la différence pratique entre eux ? Quand utiliseriez-vous private
et quand utiliseriez-vous protected
? Existe-t-il une pratique standard ou acceptable à ce sujet ?
Jusqu'à présent, pour conserver le concept d'héritage et de polymorphisme, j'utilise public
pour tout ce qui doit être accessible depuis l'extérieur (comme les constructeurs et la fonctionnalité principale de la classe), et protected
pour les méthodes internes (logique, méthodes d'aide, etc.). Suis-je sur la bonne voie ?
(Notez que cette question est pour moi, mais aussi pour référence future car je n'ai pas vu de question comme celle-ci sur Stack Overflow).
34 votes
Est-ce que cela importe? Toute langue avec un support OOP a cette préoccupation. Je programme en PHP, mais je pense que la question s'applique à n'importe quelle langue supportant l'OOP.
2 votes
D'accord, juste pour savoir si vous aviez oublié de taguer. Maintenant je vois la balise oop.
0 votes
Je dois définir la visibilité (privée/publique/protégée) pour chaque propriété de la classe? Ou seulement certaines ont besoin d'avoir un type de visibilité? Si oui, comment décider quelle propriété doit avoir une visibilité définie en haut de la classe?
1 votes
De prime abord, la différence entre protégé et privé semble évidente. Utilisez protégé si les sous-classes utiliseront la méthode/variable, sinon utilisez privé. Plus précisément, si les sous-classes devaient redéfinir une variable privée très similaire dans la classe parent, simplement la rendre protégée.
0 votes
Il y a un autre spécificateur d'accès
internal
dans le langage C# qui restreint le niveau d'accès d'une classe ou de ses membres au sein d'une assembly physique. Cependant, je ne suis pas sûr de son support ou de quelque chose de similaire dans d'autres langages.