<< Chapter < Page Chapter >> Page >

The methods of a local class can use any final local variables or method parameters that are visible from the scope in which the local class isdefined.

Similar to member classes

As mentioned earlier, local classes have many characteristics in common with member classes. This includes access to private fields and methods in thecontaining class. The thing that separates local classes from member classes is the fact that local classes have access to local variables in the scope in whichthe local class is defined.

A big restriction

There is a big restriction, however, on the ability of methods of the local class to access local variables and method parameters. The methods in a localclass can access local variables and method parameters only if they are declared final .

What does Flanagan have to say?

According to one of my favorite authors, David Flanagan, author of Java in a Nutshell, the methods in a local class don't really have access to localvariables and method parameters. Rather, when an object of the local class is instantiated, copies of the final local variables and method parameters referred to by the object's methods are stored as instance variables in theobject. The methods in the object of the local class really access those hidden instance variables. (See the later section entitled Smoke and mirrors.)

Thus, the local variables and method parameters accessed by the methods of the local class must be declared final to prevent their values from changing after the object is instantiated.

Restrictions on local classes

As with member classes, local classes cannot contain static members.

As with local variables, local classes cannot be declared public , protected , private , or static .

A local class cannot have the same name as any of its enclosing classes.

Smoke and mirrors

As I mentioned in the previous module, every class definition in a Java program, including nested top-level classes, member classes, local classes, andanonymous classes, produces a class file when the program is compiled. According to Flanagan,

"The Java Virtual Machine knows nothing about nested top-level classes and interfaces or the various types of inner classes. Therefore, the Javacompiler must convert these new types into standard non-nested class files that the Java interpreter can understand. This is done through source codetransformations that insert $ characters into nested class names. These source code transformations may also insert hidden fields, methods, andconstructor arguments into the affected classes."

A reference to the containing object

For example, the compiler automatically inserts a private instance variable in the local class to hold a reference to the containing object. It also insertsa hidden argument in all constructors for the local class, and passes the containing object's reference to the constructor for the local class. Themodified constructor saves that reference in the private instance variable of the object of the local class. Thus each object instantiated from the localclass contains a private reference to the containing object.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Object-oriented programming (oop) with java. OpenStax CNX. Jun 29, 2016 Download for free at https://legacy.cnx.org/content/col11441/1.201
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?

Ask