Java Notes
Class or Interface
Declare variables as class or interface type?
A common programming philosophy is to declare variables with a type that
makes the least assumptions. This allows flexibility
to make changes in the underlying type if this latter becomes necessary.
For example, the most obvious way to declare x
is
ArrayList x = new ArrayList(); // OK
But if x
only uses the methods defined in the
List
interface, it would be better to do the
following.
List x = new ArrayList(); // More flexible
This guarantees that x
doesn't use any methods
that aren't in the List
interface. The advantage
of this is that later the underlying implementation can be changed.
List x = new LinkedList(); // Changed underlying class
Because the performance characteristics of ArrayList and LinkedList are so different, it is probably not all that likely to make such a drastic change. You can also write your own data structure or use one of many externally defined List data structures which implement the List interface.
Why change the underlying class?
The two List
classes, ArrayList
and
LinkedList
both implement the same List
interface
methods and can be manipulated by the methods in the
Collections
class, but the performance of
different operations may be very different, eg, insertion
in the middle of an LinkedList
is more efficient,
but accessing a random element is more efficient using
a ArrayList
. If it becomes necessary to
change the underyling class for performance reasons,
it is easy to do if variables are declared by their interfaces
(List
, Map
, and Set
for the Collections classes).