2011-01-27 16 views
10

¿Cómo puedo lograr esto?¿La variable miembro y la variable de método local tienen el mismo nombre?

class Test { 
    private int var1; 

    public Test(int var1) { 
     var1 = var1; //set the member variable to what was passed in 
    } 
} 

Estoy seguro de que hay una respuesta muy obvia. Solo me estoy escapando ahora mismo.

+0

Eche un vistazo a un buen código. Verás que exactamente esto ('this.x = x') se usa para setters y constructores. No tiene sentido inventar un nuevo nombre. – maaartinus

Respuesta

19

Sí, pueden compartir el mismo nombre. Sin embargo, para hacer referencia a la variable de instancia, es necesario utilizar el prefijo this:

public Test(int var1) { 
    this.var1 = var1; 
} 
+1

¿Entonces "esto" es normalmente opcional? Pero en este caso, lo necesito porque los nombres entran en conflicto? ¿Lo estoy entendiendo correctamente? – Greg

+1

@Greg - exactamente. –

+2

En este caso, no lo necesita * porque * los nombres entran en conflicto, lo necesita para decirle a la JVM que obtenga la referencia de un alcance diferente (específico). "súper." funciona de manera similar, pero obtiene la variable/método de la clase que está extendiendo (un alcance incluso "más grande"). Algunos idiomas incluso ofrecerían un "global". modificador de tipo, pero no Java. – Dolph

2

Sí, podemos. pero solo "puedo". no es bueno.

+3

-1 "no es bueno" no es útil. Además, hay patrones comunes donde este * es * "bueno". – Dolph

+0

Notaré mi redacción. Espero que la gente sepa a qué me refiero en mi respuesta. –

+2

No sé a qué se refiere con su respuesta? – jzd

4

Sí, puede, pero la variable local ocultará la variable de clase.

Cuestiones relacionadas