Prefer Virtual Over Interface
Suppose you have a HashMap object. You can declare it as a HashMap or as
a generic Map:
Map myMap1 = new HashMap();
HashMap myMap2 = new HashMap();
Which is better?
Conventional wisdom says that you should prefer Map, because it
allows you to change the underlying implementation to anything that
implements the Map interface. Conventional wisdom is correct for
conventional programming, but isn't so great for embedded systems. Calling
through an interface reference can take 2x longer than a virtual
method call through a concrete reference.
If you have chosen a HashMap because it fits what you're doing, there
is little value in calling it a Map. Given the availability of
IDEs that refactor your code for you, there's not much value in calling
it a Map even if you're not sure where the code is headed. (Again, though,
public APIs are an exception: a good API usually trumps small performance
concerns.)