What is the difference between an abstract class and an interface in Java?
Quick answer
An abstract class can have instance fields, constructors and a mix of implemented and abstract methods but supports only single inheritance, while an interface defines a contract that a class can implement multiple times and, since Java 8, can include default methods.
Choose an abstract class when subclasses share state and base behaviour (for example a BaseRepository with a connection field). Choose an interface when you want to define a capability that unrelated classes can have, such as Comparable or Runnable, and when you want callers to depend on an abstraction.
Interface fields are implicitly public static final. Since Java 8 an interface can have default and static methods, and since Java 9 private methods, which lets library authors add methods without breaking existing implementations. A class can implement many interfaces but extend only one class.
interface Payment {
void pay(double amount);
default String currency() { return "USD"; }
}
abstract class BasePayment implements Payment {
protected final String accountId;
BasePayment(String accountId) { this.accountId = accountId; }
}