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