2009-05-04 6 views

risposta

22

No, non secondo la java language specification, 3rd edition:

6.6.8 Esempio: campi privati, Metodi e Costruttori

Un membro privato classe o costruttore è accessibile solo all'interno del corpo della classe di primo livello (§7.6) che include la dichiarazione del membro o del costruttore . Non è ereditato dalle sottoclassi .

Ma indipendentemente da questa restrizione lingua, è possibile access private fields through reflection:

Field privateStringField = 
    MyClass.class.getDeclaredField("privateString"); 
privateStringField.setAccessible(true); 

String fieldValue = (String) privateStringField.get(privateObject); 
System.out.println("fieldValue = " + fieldValue); 
+0

può essere protetto su variabili di istanza –

19

No, per che si dovrebbe usare protected.

+3

In realtà, è necessario utilizzare un setter protetto nel caso in cui la variabile privata venga rimossa da una versione futura della classe. – jmucchiello

1

classi bambino non può accedere ai membri privati ​​(che è il punto centrale di controllo di accesso privato).

1

... se non esiste un metodo di accesso definito in pippo?

Sono necessari i metodi di accesso. Inoltre, prenditi cura dell'ereditarietà, dovrebbe essere davvero genitore? Ricordare è-un controllo ..

1

Non si può accedere alle variabili private nelle classi discendenti. Normalmente si vorrebbe usare l'accesso a livello "protetto" o "pacchetto" (predefinito) per questo. Tuttavia, se vuoi essere davvero complicato, puoi ricorrere all'utilizzo del reflection e allo AccessibleObject per ottenerlo. Non consiglierei di farlo per codice di produzione a meno che non siate davvero in una situazione di bind; per i test, ecc. va bene.

1

Per utilizzare una variabile privata di una super classe in una sottoclasse, è richiesto un metodo di accesso. Altrimenti usa il modificatore protetto invece di privato.

0

La variabile privata (s) di una classe ha invariabilmente un ambito all'interno di quella classe. Se deve essere condiviso tra le sottoclassi, deve essere dichiarato "protetto"