What is the difference between an abstract class and an interface in Java, and in what scenarios would you choose one over the other?