If you do not want any implementation you go for an interface.
If you want some implementation (i.e. non-abstract methods) go for abstract class. (Remember abstract class can contain non-abstract methods methods)
Example:
Consider a abtract class Vehicle which has subclasses Car, Boat, Airplane
Now certain methods which are specific to the subclasses e.g. the move() method will be implemented in the subclasses and declared abstract in the abstract class Vehicle.
Certain methods such as doVehicleRegistration is common to all subclasses. So they are implemented in the abstract class Vehicle.
If you had used interface Vehicle instead of abstract Class Vehicle then
you had to give implementations for doVehicleRegistration method in all the classes (Car, Boat, Airplane).
Regards
Yohan Shikari,
SCJP 1.4