DevAcademia
C++C#CPythonJava
  • Java Basics

  • Java Introduction
  • Java Get Started
  • Java Syntax
  • Java Output
  • Java Comments
  • Java Variables
  • Java Data Types
  • Java Type Casting
  • Java Operators
  • Java Strings
  • Java If...Else
  • Java Switch Statement
  • Java Loops
  • Java Math
  • Java Arrays
  • Java Date
  • Java OOP

  • Java Classes/Objects
  • Java Class Attributes
  • Java Class Methods
  • Java Constructors
  • Java Destructors
  • Java this Keyword
  • Java Modifiers
  • Java Non Modifiers
  • Java Encapsulation
  • Java Packages & API
  • Java Inheritance
  • Java Polymorphism
  • Java Super Keyword
  • Java Inner Classes
  • Java Exception Handling
  • Java Abstraction
  • Java Interfaces
  • Java Enums
  • Java User Input
  • Java Quiz

  • Java Fundamentals Quiz
  • Java Basics

  • Java Introduction
  • Java Get Started
  • Java Syntax
  • Java Output
  • Java Comments
  • Java Variables
  • Java Data Types
  • Java Type Casting
  • Java Operators
  • Java Strings
  • Java If...Else
  • Java Switch Statement
  • Java Loops
  • Java Math
  • Java Arrays
  • Java Date
  • Java OOP

  • Java Classes/Objects
  • Java Class Attributes
  • Java Class Methods
  • Java Constructors
  • Java Destructors
  • Java this Keyword
  • Java Modifiers
  • Java Non Modifiers
  • Java Encapsulation
  • Java Packages & API
  • Java Inheritance
  • Java Polymorphism
  • Java Super Keyword
  • Java Inner Classes
  • Java Exception Handling
  • Java Abstraction
  • Java Interfaces
  • Java Enums
  • Java User Input
  • Java Quiz

  • Java Fundamentals Quiz

Loading Java tutorial…

Loading content
Java OOPTopic 55 of 59
←PreviousPrevNextNext→

Java Abstraction

Introduction to Abstraction

Abstraction is a core concept of object-oriented programming that hides implementation details and exposes only the essential features of an object.

In Java, abstraction is implemented using abstract classes and interfaces. It simplifies development by letting programmers focus on high-level design rather than low-level implementation.

Abstract Classes

An abstract class is a class that cannot be instantiated. It may include abstract methods (without implementation) and concrete methods (with implementation).

Abstract classes are declared using the `abstract` keyword and are extended by subclasses that provide implementations for abstract methods.

Example
// Abstract class
abstract class Animal {
    // Abstract method
    public abstract void makeSound();

    // Concrete method
    public void sleep() {
        System.out.println("Sleeping...");
    }
}

// Concrete subclass
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof! Woof!");
    }
}

public class AbstractionExample {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.makeSound();
        myDog.sleep();

        // Animal animal = new Animal(); // Error: abstract class cannot be instantiated
    }
}
Output
Woof! Woof!
Sleeping...

Abstract Methods

Abstract methods define method signatures without bodies. They must be implemented by any concrete subclass.

Key points about abstract methods:

- Declared with the `abstract` keyword

- No method body (ends with a semicolon)

- Must be implemented in subclasses

- Only allowed inside abstract classes

Example
abstract class Shape {
    protected String color;

    public Shape(String color) {
        this.color = color;
    }

    // Abstract method
    public abstract double area();

    // Concrete method
    public String getColor() {
        return color;
    }
}

class Circle extends Shape {
    private double radius;

    public Circle(String color, double radius) {
        super(color);
        this.radius = radius;
    }

    @Override
    public double area() {
        return Math.PI * radius * radius;
    }
}

public class AbstractMethodExample {
    public static void main(String[] args) {
        Circle circle = new Circle("Red", 5.0);
        System.out.println("Circle color: " + circle.getColor());
        System.out.println("Circle area: " + circle.area());
    }
}
Output
Circle color: Red
Circle area: 78.53981633974483

Benefits of Abstraction

BenefitDescription
Reduces ComplexityHides unnecessary implementation details
Increases ReusabilityAbstract classes can be reused by multiple subclasses
Enhances SecurityExposes only essential details to the outside world
Improves MaintainabilityImplementation changes don't affect the exposed interface
Supports PolymorphismEnables different implementations through a common abstraction

When to Use Abstract Classes

- When related classes should share common code

- When non-static or non-final fields are required

- When creating a base template for subclasses

- When you want to provide both abstract and reusable concrete methods

Best Practices

- Use abstract classes to define common contracts for related classes

- Focus abstract classes on a single responsibility

- Avoid creating abstract classes with only one subclass

- Name abstract methods descriptively to clarify their purpose

- Consider interfaces when multiple inheritance of type is needed

Test your knowledge: Java Abstraction
Quiz Configuration
4 of 8 questions
Sequential
Previous allowed
Review enabled
Early close allowed
Estimated time: 5 min
Java OOPTopic 55 of 59
←PreviousPrevNextNext→