Abstract class — can have constructors, state, and concrete methods. Interface — defines a type contract with optional default methods.Vivid analogy: An abstract class is like a base model car — engine and wheels come included. An interface is like a feature checklist — "must have GPS, Bluetooth" — but no actual hardware.javaabstract class Database { protected String connectionString; public Database(String conn) { this.connectionString = conn; } public abstract void connect(); public abstract void disconnect(); public void runQuery(String sql) { connect(); disconnect(); }}interface Cacheable { String getCacheKey(); default int getCacheTTL() { return 3600; }}class MySqlDatabase extends Database implements Cacheable { public MySqlDatabase(String conn) { super(conn); } @Override public void connect() { } @Override public void disconnect() { } @Override public String getCacheKey() { return "mysql:" + connectionString; }}- Abstract class — "is-a" with shared code.- Interface — "can-do" capability contract.