Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

java
communitycreator

What are abstract classes in Java?

Tarun Telang

An abstract class is a special type of class that cannot be instantiated. It contains one or more abstract methods, which are methods with unimplemented code. It is used to represent pure concepts without any detail.

Below is an example of an abstract class.

// Shape is an abstract class
abstract class Shape { 
  String name;
  abstract void draw(); // abstract method
}
An abstract class in Java

In the example above, we have an abstract class, Shape, where we can have a draw() method before it is implemented in different subclasses like Rectangle, Circle, etc.

Refer to the class diagram below to understand the class hierarchy better.

code_drawing

When do we use abstract classes in Java?

Abstract classes are used when you want to provide common functionality for all your objects, but you don’t know at the time of writing the program what kind of methods would be needed.

For example, you might want to design a Shape concept in your program. You will need to implement the draw() method in subclasses like Rectangle, Circle, Triangle, etc. But there is no way you can know at the time of writing the program what the required details are to implement it.

You might start with not implementing the methods, but it is possible that in the future you will need them. So, instead of writing all these methods in every class where they might be required, we design an abstract class called Shape and put the unimplemented methods inside this abstract class.

See the example below to understand this better. Here, we inherit from the Shape class and define the draw() method in the Circle subclass.

Circle.java
Shape.java
public class Circle extends Shape {
  
  @Override
  public void draw() {
   System.out.println("Circle");
  }
  
  public static void main(String[] args) {
    Circle circle = new Circle();
    circle.draw();
  }
}
A concrete class Circle extending an abstract class Shape

Extending an abstract class inheritable

All subclasses can inherit an abstract class and extend the functionality of their superclass by overriding the unimplemented methods in their class. They will also inherit all non-abstract methods defined in their superclass.

Rectangle.java
Shape.java
public class Rectangle extends Shape {
  
  @Override
  public void draw() {
   System.out.println("Rectangle");
  }

  public static void main(String[] args) {
    Rectangle rectangle = new Rectangle();
    rectangle.draw();
  }
}
Yet another concrete class Rectangle extending an abstract class Shape

In the examples above, we have a class called Shape with an abstract method called draw. We also have classes like Circle and Rectangle which extend the Shape class.

We can overwrite the draw() method in both the classes. This is where abstract classes come into picture. All we need to do is define the draw method in the abstract class, and all sub-classes of Shape will inherit the draw() method and, wherever required, overwrite the abstract method.

RELATED TAGS

java
communitycreator
RELATED COURSES

View all Courses

Keep Exploring