2011-12-26 17 views
25

Sto leggendo il libro The Java Programming Language, 3rd edition.Che cosa significa il modificatore protetto?

Nel capitolo 3.5, che illustra il protected modificatore con le seguenti parole:

Più precisamente, oltre ad essere accessibile all'interno della classe stessa e al codice all'interno dello stesso package , un membro protetto si può accedere anche da una classe attraverso i riferimenti oggetto che sono almeno dello stesso tipo della classe che è, i riferimenti del tipo di classe o uno dei suoi sottotipi.

Le parole mi fa confusa, in due aspetti:

1. membro protetto si può accedere dal codice all'interno dello stesso pacchetto? Quello che sapevo membro prima che siano protette si può accedere solo dalla sottoclasse ...

2. Non capisco cosa vuol dire a protected member can also be accessed from ..., qualcuno può spiegare a me per favore?

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html. protetto significa che è possibile accedere all'attributo/metodo all'interno del pacchetto e anche dei sottotipi. – aishwarya

+0

Ecco un semplice [cheat sheet] (http://stackoverflow.com/a/33627846/276052) che spiega 'protected' e gli altri modificatori di accesso. – aioobe

risposta

0

Non capisco cosa possa accedere a un membro protetto da ... dire, chiunque può spiegarmi per favore?

Ad esempio, si dispone di un oggetto A e un oggetto B, entrambi della stessa classe. L'oggetto A sarà in grado di interrogare le proprietà e i metodi protetti dell'oggetto B se ha un riferimento ad esso. Il modificatore protetto viene applicato a livello di classe, non a livello di oggetto. Questo può tornare utile in alcune situazioni.

11

In Java, protected significa che al membro è possibile accedere da qualsiasi classe nello stesso pacchetto e sottoclassi anche se si trovano in altri pacchetti.

Nota

A protected variable is not visible outside the package 

per esempio B si estende A e A ha un int protetta x; può essere utilizzato all'interno della classe B. Ma non può essere utilizzato utilizzando la sua variabile di istanza

2

1) Sì, i membri protetti possono accedere alle classi dallo stesso pacchetto. Questo è il modo in cui funziona Java.

2) Ciò significa che le sottoclassi possono accedervi.

16
  1. Sì, protected i membri possono accedere dalla classe stessa, sottoclassi della classe e anche tutte le classi dello stesso package della classe (non importa se queste sono le sottoclassi o meno). Se prima non conoscevi quell'ultima parte, hai appena imparato qualcosa di nuovo.

  2. Significa semplicemente che è possibile utilizzare tali membri; se un membro non è accessibile, significa che otterrai un errore del compilatore quando tenti di usarlo.

+0

Per la seconda istruzione: non genera errori quando lo stato 'protected int '; dichiarato inizialmente e accede in seguito. Perché il suo valore predefinito è impostato automaticamente su 0. Quindi 'status' sarà sempre' 0' quando non è accessibile. –

+0

@JanakaRRajapaksha il valore predefinito delle variabili membro non ha nulla a che fare con l'accessibilità. – Jesper

+0

Supponiamo che l'ho dichiarato dall'inizio. E provando ad accedervi da una classe non accessibile (x) o da un metodo (x). Dal momento che non è accessibile, avrà il suo valore predefinito quando viene emesso da un luogo accessibile. Ora, secondo la tua seconda affermazione, mi aspetto un errore, ma non lo è. E fornisce semplicemente 0 come valore predefinito. In modo che i codici in "x", inutile. –

0

Ecco le risposte

  1. Sì. È possibile accedere ai membri protetti (variabili di istanza e metodi) di una classe da altre classi all'interno dello stesso pacchetto e da qualsiasi altra classe che estende questa classe contenente il membro a cui accedere. Nella stessa specifica, hanno anche indicato la tabella in cui il livello di accesso è strettamente crescente fornendo tutti gli accessi consentiti nel livello precedente: privato -> pacchetto -> protetto -> pubblico

  2. Come membri protetti (variabili di istanza/stati e metodi/comportamenti) di una classe X sono ereditati e visibili come parte delle sottoclassi di X, ad esempio Y1, Y2, Y3 e possono essere ulteriormente giù ai livelli successivi, qualsiasi riferimento a oggetti di tipo X o Y1, Y2, y3 può essere utilizzato per accedere a quel membro protetto.

0

Basta pensarlo come tra pubblico e privato. Puoi accedere a qualsiasi cosa da classi pubbliche e meno da classi private.