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.