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