Abstraction in Java

What is Abstraction in Java?

Abstraction is the concept of object-oriented programming that “shows” only essential attributes and “hides” unnecessary information. The main purpose of abstraction is hiding the unnecessary details from the users. Abstraction is selecting data from a larger pool to show only relevant details of the object to the user. It helps in reducing programming complexity and efforts. It is one of the most important concepts of OOPs.

Click here if the video is not accessible

Let’s Study Abstraction in OOPs with example:

Suppose you want to create a banking application and you are asked to collect all the information about your customer. There are chances that you will come up with following information about the customer

Abstraction in Java
Abstraction in Java

But, not all of the above information is required to create a banking application. So, you need to select only the useful information for your banking application from that pool. Data like name, address, tax information, etc. make sense for a banking application which is an Abstraction example in OOPs

Abstraction in Java

Since we have fetched/removed/selected the customer information from a larger pool, the process is referred as Abstraction in OOPs. However, the same information once extracted can be used for a wide range of applications. For instance, you can use the same data for hospital application, job portal application, a Government database, etc. with little or no modification. Hence, it becomes your Master Data. This is an advantage of Abstraction in OOPs.

Difference between Abstraction and Encapsulation

Abstraction Encapsulation
Abstraction in Object Oriented Programming solves the issues at the design level. Encapsulation solves it implementation level.
Abstraction in Programming is about hiding unwanted details while showing most essential information. Encapsulation means binding the code and data into a single unit.
Data Abstraction in Java allows focussing on what the information object must contain Encapsulation means hiding the internal details or mechanics of how an object does something for security reasons.

Difference between Abstract Class and Interface

Abstract Class Interface
An abstract class can have both abstract and non-abstract methods. The interface can have only abstract methods.
It does not support multiple inheritances. It supports multiple inheritances.
It can provide the implementation of the interface. It can not provide the implementation of the abstract class.
An abstract class can have protected and abstract public methods. An interface can have only have public abstract methods.
An abstract class can have final, static, or static final variable with any access specifier. The interface can only have a public static final variable.

What is Abstract Class?

ABSTRACT CLASS is a type of class in Java, that declare one or more abstract methods. These classes can have abstract methods as well as concrete methods. A normal class cannot have abstract methods. An abstract class is a class that contains at least one abstract method. We can understand the concept by the shape example in java.

Consider the following class hierarchy consisting of a Shape class which is inherited by three classes Rectangle, Circle, and Triangle. The Shape class is created to save on common attributes and methods shared by the three classes Rectangle, Circle, and Triangle. calculateArea() is one such method shared by all three child classes and present in Shape class.

Abstract Class in Java

Shape Abstraction Example

Now, assume you write code to create objects for the classes depicted above. Let’s observe how these objects will look in a practical world. An object of the class rectangle will give a rectangle, a shape we so commonly observed in everyday life.

Abstract Class

An object of the class triangle will give a triangle, again a common everyday shape.

Abstract Class

But what would an object of Class Shape look like in a practical world ??

Abstract Class

If you observe the Shape class serves in our goal of achieving inheritance and polymorphism. But it was not built to be instantiated. Such classes can be labelled Abstract. An abstract java class cannot be instantiated.

Syntax:

abstract class Shape{
	// code
}

It is possible that you DO NOT label Shape class as Abstract and then instantiate it. But such object will have no use in your code and will open a room for potential errors. Hence this is not desirable.

What are Abstract Methods in Java?

ABSTRACT METHOD in Java, is a method that has just the method definition but does not contain implementation. A method without a body is known as an Abstract Method. It must be declared in an abstract class. The abstract method will never be final because the abstract class must implement all the abstract methods.

As we all know, the formula for calculating area for rectangle, circle, & triangle is different. The calculateArea() method will have to be overridden by the inheriting classes. It makes no sense defining it in the Shape class, but we need to make sure that all the inheriting classes do have the method.

Such methods can be labeled abstract.

Syntax:

abstract public void calculateArea();

For an abstract method, no implementation is required. Only the signature of the method is defined.

Abstraction Code Example

abstract class Shape{  
  abstract void calculateArea();  
}  
 class guru99 extends Shape{  
void calculateArea(){System.out.println("Area of Shape");}  
public static void main(String args[]){  
 Shape obj = new guru99();  
 obj.calculateArea();
}  
}

Advantages of Abstraction

  • The main benefit of using an Abstraction in Programming is that it allows you to group several related classes as siblings.
  • Abstraction in Object Oriented Programming helps to reduce the complexity of the design and implementation process of software.

Final Keyword in Java

The final modifier applies to classes, methods, and variables. The meaning of final varies from context to context, but the essential idea is the same.

  • A final class cannot be inherited
  • A final variable becomes a constant and its value cannot be changed.
  • A final method cannot be overridden. This is done for security reasons, and these methods are used for optimization.

Example :- To learn abstract & final keywords

Step 1) Copy the following code into an Editor.

abstract class Shape{
   final int b = 20;
   public void display(){
     System.out.println("This is display method");
   }
   abstract public void calculateArea();
}

public class Rectangle extends Shape{
   public static void main(String args[]){
      Rectangle obj = new Rectangle();
      obj.display();
     //obj.b=200;
  }
  //public void calculateArea(){}
}

Step 2) Save , Compile & Run the code.

Step 3) Error =? The abstract method is not implemented int the class Rectangle. To fix the issue uncomment line #15.

Step 4) Uncomment line # 13. Save & Compile the code.

Step 5) Error = ? variable b is final

When to use Abstract Methods & Abstract Class?

Abstract methods are mostly declared where two or more subclasses are also doing the same thing in different ways through different implementations. It also extends the same Abstract class and offers different implementations of the abstract methods.

Abstract classes help to describe generic types of behaviors and object-oriented programming class hierarchy. It also describes subclasses to offer implementation details of the abstract class.

Summary:

  • Abstraction in Programming is the process of selecting important data sets for an Object in your software and leaving out the insignificant ones.
  • Once you have modeled your object using Data Abstraction in Java, the same set of data could be used in different applications.