Abstract class — can contain both abstract and concrete methods. Interface — primarily a contract with optional default methods.Vivid analogy: An abstract class is like a recipe template — it gives you some ingredients and steps but leaves room for additions. An interface is like a restaurant menu — it tells you what dishes are available but provides no cooking instructions.Why it matters: Interfaces enable multiple inheritance of type. Abstract classes provide shared implementation that reduces code duplication among closely related classes.javaabstract class Shape { private String color; public Shape(String color) { this.color = color; } public String getColor() { return color; } public abstract double area(); public abstract double perimeter();}interface Drawable { void draw(); default void fill() { System.out.println("Filling shape..."); }}class Circle extends Shape implements Drawable { private double radius; public Circle(String color, double radius) { super(color); this.radius = radius; } @Override public double area() { return Math.PI * radius * radius; } @Override public double perimeter() { return 2 * Math.PI * radius; } @Override public void draw() { System.out.println("Drawing circle"); }}- Abstract class — single inheritance, constructors, state.- Interface — multiple inheritance, contracts, default methods.