Abstraction in Java is a fundamental concept in object-oriented programming (OOP) that hides implementation details and only shows essential features.
Abstract classes may have methods without implementation and must be implemented by subclasses. By abstracting functionality, changes in the implementation do not affect the code that depends on the abstraction.
Java provides two ways to implement abstraction: Abstract Classes (Partial Abstraction) and Interface (100% Abstraction).
Interfaces fulfill two goals: They allow the programmer to be more abstract when referencing objects and enable multiple inheritance in Java.