I did read a number of topics discussing inner classes, and i was under the impression that an inner class has access to the variables and methods of the enclosing class. In
System.out.println(inner.a);
You are attempting to read a as if it is a property of you inner class, but it's not. You should define a method that will read the desired property of the outer class. So in your inner class, you should have:
public String getA(){
return a;
}
System.out.println(inner.getA());
This should work.