What is the Difference Between Abstract Class and Interface?

🆚 Go to Comparative Table 🆚

The main difference between an abstract class and an interface lies in the level of abstraction and the features they provide. Here are the key differences between the two:

  1. Level of Abstraction: An abstract class achieves partial abstraction (0 to 100%), while an interface achieves full abstraction (100%). Abstract classes can have methods with implementations, whereas interfaces can only have abstract methods.
  2. Method Implementation: In an abstract class, some methods can be implemented, while others are left abstract, meaning that they have no implementation and must be overridden by concrete subclasses. All methods in an interface are by default abstract and must be implemented by any class that implements the interface.
  3. Inheritance: A class can inherit from only one abstract class, but it can implement multiple interfaces. This is because an abstract class represents a type of object, while an interface represents a set of behaviors.
  4. Access Modifiers: Abstract classes can have private methods with the implementation (introduced in Java 9). Interfaces can only have public access methods.
  5. Variables: An abstract class can have member variables, while an interface cannot.

In summary, abstract classes are used to provide a base class for concrete subclasses to inherit from, while interfaces are used to define a set of methods that a class must implement. Using interfaces and abstract classes together is the best approach to design a system.

Comparative Table: Abstract Class vs Interface

Here is a table comparing the differences between abstract classes and interfaces:

Feature Abstract Class Interface
Inheritance A class can inherit from only one abstract class A class can implement multiple interfaces
Access Modifiers Can have access modifiers (public, protected, private) All methods are public by default, no access modifiers
Data Fields Can have data fields Cannot have data fields
Method Implementation Can have implemented and abstract methods Can only have abstract methods
Method Accessibility Methods can have public, protected, or private access Methods are public by default
Constants Can have constants Cannot have constants

In summary, abstract classes are used to provide a base class for concrete subclasses to inherit from, while interfaces are used to define a set of methods that a class must implement. Abstract classes can have implemented and abstract methods, and can have access modifiers and data fields, whereas interfaces can only have abstract methods and public access by default.