Core JAVA

Difference between interfaces and abstract classes in Java

This is very common question in core java interview for entry level programmer so let’s discuss some important point of difference as below:

Difference between interfaces and abstract classes

abstract class interface
Abstract class may not be contain abstarct method or may be contain. we can say it can have abstract and non-abstract methods. By default all methods of interface are abstract.
An abstract class may contain non-final variables. Variables declared in a Java interface is by default final.
A Java abstract class can have the any flavors of class members like private, abstract. Members of a Java interface are public by default.
An abstract class required when we want some default behavior in our project as like in DAO layer there are some common behavior save object, delete object etc. Java interface is required when we want implement contract between service and client.
The abstract keyword is used to declare abstract class.
Example:
public abstract class Shape{
public abstract void draw();
}
The interface keyword is used to declare interface.
Example:
public interface Drawable{
void draw();
}
A Java abstract class should be extended using keyword “extends”.
Example:
public class Circle extends Shape{
public void draw(){
//draw circle;
}
}
Java interface should be implemented using keyword “implements”;
Example:
public class Circle implements Drawable{
public void draw(){
//draw circle;
}
}
Abstract class can have static methods, main method and constructor. Interface can’t have static methods, main method or constructor.
Abstract class doesn’t support multiple inheritance. Interface supports multiple inheritance.

Abstract Class Examples in Java –

abstract class Shape{
    abstract void draw();
}

class Rectangle extends Shape{
   void draw(){
     System.out.println("Drawing Rectangle");
   }
}

class Traingle extends Shape{
   void draw(){
     System.out.println("Drawing Traingle");
   }
}

class AbstractDemo{
   public static void main(String args[]){  
       Shape s1 = new Rectangle();
       s1.draw();
       s1 = new Traingle();
       s1.draw();
    }
}

Output:
Drawing Rectangle
Drawing Traingle.

Interface Examples in Java –

interface Drawable{
    abstract void draw();
    abstract void fillColor();
}

class abstract BlueShape implement Drawable{
   void fillColor(){
     System.out.println("Fill Blue color in Shape");
   }
}

class Traingle extends BlueShape {
   void draw(){
     System.out.println("Drawing Blue Traingle");
   }
}

class InterfaceDemo{
   public static void main(String args[]){  
       Drawable s1 = new Traingle();
       s1.draw();
     }
}

Output:

Drawing Blue Traingle.

Previous
Next
Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput

Recent Posts

Strategy Design Patterns using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

2 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

2 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

2 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

2 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

2 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

3 years ago