The inner classes, and then not static, can access even if with some limitation to the variables of the outer class.
Consider the following example:
public class Outer {
private String x = "outer";
public void outerMethod() {
final String y = "inner";
class Inner {
public void innerMethod() {
System.out.println("x = " + x);
System.out.println("y = " + y);
}
}
Inner innerTest = new Inner();
innerTest.innerMethod();
}
}
Here the inner class Inner isn’t only inside the class but it is also inside the method outerMethod().
It can access to the member variable x even if it is declared private and it can access to the local variable y only because it is declared final.
If the variable y is not declared final the code will not compile and would return the error:
“Cannot refer to a non-final variable y inside an inner class defined in a different method …”
A similar situation also occurs for anonymous classes:
public class Outer {
private String x = "outer";
public void outerMethod() {
final String y = "inner";
Inner innerTest = new Inner() {
public void innerMethod() {
System.out.println("x = " + x);
System.out.println("y = " + y);
}
};
innerTest.innerMethod();
}
}
interface Inner {
void innerMethod();
}
To test the class Outer you need a method main():
public class Main {
public static void main(String[] args) {
Outer test = new Outer();
test.outerMethod();
}
}
which generates the output:
x = outer y = inner

Leave a Reply