Abstract Classes and Interfaces

An abstract class can hold shared state and implementation while preventing direct instantiation. An interface primarily defines a capability or contract and can contain default, static, and private methods.

A class can implement multiple interfaces but extend only one class.

interface Auditable {
    String actor();
}

abstract class BaseCommand {
    private final long createdAt = System.currentTimeMillis();
    long createdAt() { return createdAt; }
}

final class CreateUserCommand extends BaseCommand implements Auditable {
    public String actor() { return "system"; }
}
Key Takeaways
  • A class has single inheritance but can implement multiple interfaces.
  • Abstract classes are useful when shared state or implementation is intrinsic.
  • Interfaces define capabilities and reduce dependency on concrete classes.