Describe the difference between abstract classes and interfaces, and provide a real-world use case for each in software development.