Usually this is not what you want to separate interfaces from implementations. For example, this:
List<T> l = new ArrayList<T>();
is preferred to this: ArrayList<T> l = new ArrayList<T>();
Of course, it would be nice for the compiler to assume the latter if no type is specified on the left side.