web-dev-qa-db-fra.com

Que signifie le modificateur protégé?

Je lis le livre The Java Programming Language, 3rd edition .

Dans le chapitre 3.5, il illustre le modificateur protected avec les mots suivants:

Plus précisément, au-delà d'être accessible dans la classe elle-même et de coder dans le même package, un membre protégé est également accessible à partir d'une classe via des références d'objet qui sont au moins du même type que la classe qui est, des références du type de la classe ou l'un de ses sous-types.

Les mots me rendent confus, sous deux aspects:

1. le membre protégé est accessible par code dans le même package? Ce que je savais auparavant, c'est que le membre protégé n'est accessible que par la sous-classe ...

2. Je ne comprends pas ce que a protected member can also be accessed from ... veux dire, n'importe qui peut m'expliquer s'il vous plait?

27
Leem.fin
  1. Oui, les membres protected sont accessibles à partir de la classe elle-même, des sous-classes de la classe et également de toutes les classes dans le même package de la classe (peu importe si ce sont des sous-classes ou non). Si vous ne connaissiez pas cette dernière partie auparavant, alors vous venez d'apprendre quelque chose de nouveau.

  2. Cela signifie simplement que vous pouvez utiliser ces membres; si un membre n'est pas accessible, cela signifie que vous obtiendrez une erreur de compilation lorsque vous essayez de l'utiliser.

18
Jesper

En Java, protected signifie que le membre est accessible par n'importe quelle classe du même package et par des sous-classes même si elles se trouvent dans un autre package.

Remarque

A protected variable is not visible outside the package

par exemple, B étend A et A a un int x protégé; il peut être utilisé dans la classe B. Mais ne peut pas être accessible en utilisant sa variable d'instance

11
Hussein Zawawi

1) Oui, les membres protégés sont accessibles par les classes à partir du même package. C'est ainsi que fonctionne Java.

2) Cela signifie que les sous-classes peuvent y accéder.

2
Mario Marinato

Pensez-y simplement comme entre public et privé. Vous pouvez accéder à tout depuis les classes publiques et moins depuis les classes privées.

0
Jimmt

Je ne comprends pas de quoi un membre protégé est également accessible à partir de ... signifie, n'importe qui peut m'expliquer s'il vous plaît?

Par exemple, vous avez un objet A et un objet B, tous deux de la même classe. L'objet A pourra interroger les propriétés et méthodes protégées de l'objet B s'il y fait référence. Le modificateur protégé est appliqué au niveau de la classe, pas au niveau de l'objet. Cela peut être utile dans certaines situations.

0
ChristopherS

Voici les réponses

  1. Oui. Les membres protégés (variables et méthodes d'instance) d'une classe sont accessibles par d'autres classes du même package ainsi que par toute autre classe qui étend cette classe contenant le membre auquel accéder. Dans la même spécification, ils ont également donné le tableau où le niveau d'accès augmente strictement en fournissant tous les accès autorisés au niveau précédent: privé -> package -> protégé -> public

  2. Comme les membres protégés (variables/états et méthodes/comportements d'instance) d'une classe X sont hérités et visibles dans le cadre des sous-classes de X, disons Y1, Y2, Y3 et peuvent être plus bas jusqu'aux niveaux suivants, toute référence d'objet de le type X ou Y1, Y2, y3 peut être utilisé pour accéder à ce membre protégé.

0
arunram