Explain the difference between an interface and an abstract class, and provide a real-world example of when to use each.