Between interfaces and enums, which is better for declaring constants? Why is it so?
Interfaces are designed to define common behaviours, enums to define common values.
Enum represents a real value which can be compared to another value, or stored in the database easily. You can also have a flag-enum (in C#, don't know in Java) which let you perform binary operations on enum's values (AND, OR, XOR, etc).