1. The Hook (The "Byte-Sized" Intro)
In a Nutshell: Default methods (Java 8+) are interface methods WITH implementation, declared using the default keyword. They allow adding new methods to interfaces without breaking existing implementations. This solved the "interface evolution" problem and enabled features like Streams API.
Think of iPhone software updates. Apple adds new features (default methods) without forcing every app to update. Apps can use the new features or keep existing behavior!
2. Conceptual Clarity (The "Simple" Tier)
💡 The Analogy: The Optional Feature
Like a car with optional cruise control:
- Required features (abstract methods): steering, brakes
- Optional features (default methods): cruise control (works out of the box, or you can customize)
3. Technical Mastery (The "Deep Dive")
Formal Definition
Default Method:
- Declared with
defaultkeyword - Has implementation in the interface
- Can be overridden by implementing classes
- Enables backward compatibility
Why Added in Java 8?
Before Java 8, adding a method to an interface broke ALL implementing classes. Collections couldn't add forEach() without breaking thousands of implementations!
4. Interactive & Applied Code
interface Vehicle {
void start(); // Abstract (must implement)
// Default method (optional to override)
default void honk() {
System.out.println("Beep beep!");
}
default void displayInfo() {
System.out.println("This is a vehicle");
}
}
class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car starting...");
}
// Using default honk() as-is (no override)
// Overriding default method
@Override
public void displayInfo() {
System.out.println("This is a car");
}
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.start(); // Implemented method
car.honk(); // Default method (not overridden)
car.displayInfo(); // Overridden default method
}
}5. The Comparison & Decision Layer
| Feature | AbstractMethod | Default Method |
|---|---|---|
| Implementation | None | Has implementation |
| Must Override? | Yes | Optional |
6. The "Interview Corner" (The Edge)
The "Killer" Interview Question: "What problem do default methods solve?" Answer: Interface evolution. Before Java 8, adding a method to an interface broke all implementing classes. Default methods let you add new functionality without forcing everyone to implement it immediately.
Example: Collection.stream() was added via default method in Java 8!
Pro-Tip: Resolve conflicts explicitly:
interface A { default void show() { } }
interface B { default void show() { } }
class C implements A, B {
public void show() {
A.super.show(); // Choose which one!
}
}