Java Reference
In-Depth Information
10.6.4
Interfaces as specifications
In this chapter, we have introduced interfaces as a means to implement multiple inheritance in
Java. This is one important use of interfaces, but there are others.
The most important characteristic of interfaces is that they completely separate the definition of
the functionality (the class's “interface” in the wider sense of the word) from its implementation.
A good example of how this can be used in practice can be found in the Java collection hierarchy.
The collection hierarchy defines (among other types) the interface List and the classes
ArrayList and LinkedList (Figure 10.5). The List interface specifies the full functionality
of a list, without giving any implementation. The subclasses ( LinkedList and ArrayList )
provide two different implementations of the same interface. This is interesting, because the
two implementations differ greatly in the efficiency of some of their functions. Random access
to elements in the middle of the list, for example, is much faster with the ArrayList . Inserting
or deleting elements, however, can be much faster in the LinkedList .
Figure 10.5
The List interface
and its subclasses
«interface»
List
implements
implements
ArrayList
LinkedList
Which implementation is better in any given application can be hard to judge in advance. It
depends a lot on the relative frequency with which certain operations are performed and on
some other factors. In practice, the best way to find out is often to try it out: implement the
application with both alternatives and measure the performance.
The existence of the List interface makes it very easy to do this. If, instead of using
ArrayList or LinkedList as variable and parameter types, we always use List , our appli-
cation will work independently of the specific type of list we are currently using. Only when we
create a new list do we really have to use the name of the specific implementation. We would,
for instance, write
List<Type> myList = new ArrayList<Type>();
Note that the polymorphic variable's type is just List of Type . This way, we can change the
whole application to use a linked list by just changing ArrayList to LinkedList in a single
location when the list is being created.
Exercise 10.57 Which methods do ArrayList and LinkedList have that are not
defined in the List interface? Why do you think that these methods are not included in
List ?
 
Search WWH ::




Custom Search