Java Reference
In-Depth Information
Class BAIterator has several problems. For example, it cannot access the
array of accounts or field size of class Bank directly (as attempted in the initial-
ization of field n ). So, Bank has to have getter methods for fields bank and size ,
and an instance of class Bank has to be passed to the Iterator . But then BAIt-
erator needs a constructor that has an object of class Bank as parameter. Thus,
several complications arise in attempting to get the two classes to communicate.
These problems arise because BAIterator is separate from class Bank . The
solution to these problems is to make BAIterator an inner class of Bank , as
shown in Fig. 12.16.
Now, by the inside-out rule, the references to size and bank within class
BAIterator refer directly to fields bank and size of class Bank .
Note that we made class BAIterator private so that it cannot be referenced
from outside. But we provide method iterator to obtain new instances of
BAIterator . The return type of method iterator is not BAIterator but Iter-
ator —the user of class Bank does not even know about the name BAIterator
and can never reference it. This is the standard way of making such an iterator
available outside the class.
Study this class and its inner class carefully; use this pattern whenever an
inner iterator class is desired.
Get the class
of Fig. 12.17
from lesson
page 12.6.
The file drawer for an inner class
In Fig. 12.17, we show a class Out with an inner class In . In our model of
execution, each class has a file drawer in a filing cabinet, and the question you
may ask is where the file drawer for inner class In goes. Each instance of Out is
supposed to contain the non-static components of Out . Since In is now a non-
static component, a file drawer for In is in each instance of Out !
Figure 12.18 contains an example of Out 's file drawer, with two manilla
folders and the static variable. Each folder of class Out contains a file drawer for
In , with one folder showing.
With respect to Fig. 12.17, the inside-out rule, which defines what a partic-
ular part of a program can reference directly, indicates the following with respect
public class Out {
public static int x;
private int y;
public int meth() {...}
class In {
int z;
void meth2()
{ z= y; }
Figure 12.17:
Classes to illustrate file drawers for inner classes
Search WWH ::

Custom Search