Explain the difference between an abstract class and an interface in Java, and when you would choose one over the other.