The inner variable shadows the outer variable. This is almost always a bad idea, and leads to a lot of confusion. My advice is never shadow a variable.
int width;
. . .
public void setWidth(int width) {
this.width = width;
}
It is common to name the parameter the same as
the instance variable. To refer to the instance
variable rather than the parameter, it's necessary
to qualify it with this.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Shadow.java -- Illustrate variable shadowing.
// Fred Swartz - 2003 - Jun
class Shadow {
static int x = 1;
public static void main(String[] args) {
int x = 10;
//--- prints local, not class variable.
System.out.println("main : x = " + x);
//--- prints class, not local variable.
System.out.println("main : Shadow.x = " + Shadow.x);
printa();
printb(100);
}//end main
static void printa() {
//--- prints x in enclosing scope, not x in caller.
System.out.println("printa: x = " + x);
}//end printa
static void printb(int x) {
//--- Parameters are like local variables.
System.out.println("printb: x = " + x);
}//end printb
}//end class Shadow
|
main : x = 10 main : Shadow.x = 1 printa: x = 1 printb: x = 100