2013-07-10 24 views
12

Nelle classi interne, le variabili della classe esterna sono accessibili, ma le variabili locali di un metodo non lo sono. Ho capito la parte relativa alle variabili locali di un metodo non accessibile, ma voglio sapere perché le variabili di classe esterne sono accessibili?Accesso alla variabile di classe esterna nella classe interna

La mia comprensione è che come una classe interna si lega con la classe esterna, così finché il genitore è disponibile, il bambino può accedere alle sue variabili padre. Ho ragione?

+1

Classe interna statica o non statica? –

+2

@DuncanJones: le classi interne sono sempre non statiche. Dai un'occhiata qui ... http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html –

+1

@VishalK Grazie, ho erroneamente chiamato classi innestate * classi interne * per anni. Ops! –

risposta

28

Supponendo che la classe esterna sia chiamata Outer, dall'ambito della classe interna (non statica), Outer.this.foo per ottenere sul campo.

Per esempio,

Outer.this.foo=new ArrayList<>(); 

cui esterno è il nome della classe e foo identifica il campo.

Puoi anche prenderlo direttamente come foo=new Baz() ma selezionerà il campo interno se c'è un conflitto di denominazione a causa dello shadowing.

se si tratta di una classe interna statica, è necessario un'istanza esplicita:

outerInstance.foo=new ArrayList<>(); 

o se il campo per accedere è statico, accedervi come al solito con:

Outer.staticFoo=new ArrayList<>(); 
+0

Ciao, grazie per la risposta, Qui la mia domanda è se la classe interna e la classe esterna usano la variabile alla volta ci potrebbe essere una possibilità di problemi concomitanti.Ma le classi interne usano la variabile come usano due metodi di una classe.so, dovremmo aver bisogno di usare la sincronizzazione per gestirlo con la classe interiore. – kiran

+1

@ user5 No, non oltre la sincronizzazione che è necessario eseguire in qualsiasi altro caso. Le classi interne ed esterne non creano nuovi thread. – hexafraction

0

Risposta: Le variabili di classe esterne in java sono accessibili a causa dell'ambito lessicale.

Che cos'è un ambito lessicale?

L'ambito definito nell'ordine in cui il codice è stato creato. Diciamo la struttura di classe è la seguente

OuterMost 
    --Inner 
    --InnerMost 

Poi il più classe interna sarà in grado di accedere alle variabili da interno e esterno più.

Problemi correlati