Abstract class — partial implementation with state. Interface — pure contract with optional default methods.Vivid analogy: An abstract class is like a partially built house — walls and roof exist, you add furniture. An interface is like building codes — "must have plumbing and electricity" but no actual installation.Why it matters: Interfaces define capabilities that unrelated classes can share (e.g., Comparable, Serializable). Abstract classes share implementation among closely related subclasses.javaabstract class Vehicle { private String brand; public Vehicle(String brand) { this.brand = brand; } public abstract void start(); public abstract void stop(); public void displayInfo() { System.out.println("Brand: " + brand); }}interface Drivable { void drive(); default void honk() { System.out.println("Beep beep!"); }}class Car extends Vehicle implements Drivable { public Car(String brand) { super(brand); } @Override public void start() { System.out.println("Started"); } @Override public void stop() { System.out.println("Stopped"); } @Override public void drive() { System.out.println("Driving"); }}- Abstract class — "is-a" with shared implementation.- Interface — "can-do" capability contract.