Engineering DEC 8, 2025 • 02 MIN READ

IF YOU STILL CONFUSE
ABSTRACT CLASS VS INTERFACE
READ THIS NOW

“Should I use an Abstract Class or an Interface?”

Abstract technical background

Developers argue about it almost as often as they argue about tabs vs spaces. But today, you’ll finally understand the difference clearly, simply, and with real-life examples that instantly make sense.

Let’s dive into it.

What Is an Abstract Class?

An abstract class is like a partially completed blueprint.

It gives you:

  • check_circle Some ready-made features (concrete methods)
  • check_circle Some empty slots you must fill (abstract methods)
  • check_circle The ability to hold state (fields)
  • check_circle Inheritance rules (a class can only extend one abstract class)

Use it when classes share behavior + state + base structure.

Example

Animal.java JAVA
abstract class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    // abstract method = must be implemented
    abstract void makeSound();

    // concrete method = ready to use
    void sleep() {
        System.out.println(name + " is sleeping...");
    }
}
Dog.java JAVA
class Dog extends Animal {
    Dog() {
        super("Dog");
    }

    @Override
    void makeSound() {
        System.out.println("Woof!");
    }
}

Usage

Main.java JAVA
public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // Woof!
        dog.sleep();     // Dog is sleeping...
    }
}

What Is an Interface?

An interface is a contract, it only tells you what must be done, not how.

  • check_circle No state (before Java 8; now can have static/final fields)
  • check_circle No constructors
  • check_circle A class can implement multiple interfaces
  • check_circle Used to define capabilities or behavior, not identity

Example

File.java JAVA
interface Flyable {
    void fly();
}

interface Swimmable {
    void swim();
}

class Duck implements Flyable, Swimmable {
    @Override
    public void fly() {
        System.out.println("Duck is flying!");
    }

    @Override
    public void swim() {
        System.out.println("Duck is swimming!");
    }
}

Usage

Main.java JAVA
public class Main {
    public static void main(String[] args) {
        Duck duck = new Duck();
        duck.fly();
        duck.swim();
    }
}

When Should You Use

Use Abstract Class when:

  • check_circle Classes share common properties (fields)
  • check_circle They share some default behaviors
  • check_circle You need a base class with constructor
  • check_circle You want a controlled hierarchy

Example

Animal → Dog / Cat / Tiger

Use Interface when:

  • check_circle You want to define a capability
  • check_circle You want multiple implementations
  • check_circle You want to avoid forced inheritance structure
  • check_circle You want something unrelated to share the same behavior

Example

Driveable, Runnable, Serializable (They don’t care what the object is — only what it can do.)

Real World Analogy

Abstract Class = A partially built house template

You get walls, floors, wiring (default methods), but you must finish the design (abstract methods).

Interface = A contract saying you must do something

Example: "If you call yourself Flyable, you MUST implement fly()."

Final Thoughts

Abstract classes and interfaces are not enemies.
They solve different problems:

  • check_circle Abstract Class → “I am something.”
  • check_circle Interface → “I can do something.”

Once you understand that, it becomes easy.

READ BEYOND THE VOID

Technical blueprint background
Tutorial

Spring Boot Kafka

I will demonstrate spring boot service using kafka.

Read Entry
Abstract digital network
Engineering

How to show traceId in log when using Async in Spring Boot

Solving traceId in log.

Read Entry
Circuit board macro
Backend Notes

Exclusion file and duplication check on Sonarqube

Sonarqube is an open source platform developed by SonarSource.

Read Entry