When would you use an interface vs. abstract class?