We read that inner
classes can be accessed only by the outer classes that enclose them. But this isn't true. Java bytecode has no concept of inner classes,
so inner classes are translated by the compiler into ordinary classes that happen to be accessible to any code in
the same package.
But wait, it gets worse. An inner class gets access to the fields of
the enclosing outer class, even if these fields are declared private. And the
inner class is translated into a separate class.
To let this separate class access the fields of the outer class, the
compiler silently changes these fields from private to package scope! It's bad enough that
the inner class is exposed; but it's even worse that the compiler is silently
overruling your decision to make some fields private. Don't use inner classes
if you can help it.
No comments:
Post a Comment