In short the differences are the following:
Syntactical Differences Between Interface and Abstract Class:
- Methods and members of an abstract class can have any visibility. All methods of an interface must be public. //Does not hold true from Java 9 anymore
- A concrete child class of an Abstract Class must define all the abstract methods. An Abstract child class can have abstract methods. An interface extending another interface need not provide default implementation for methods inherited from the parent interface.
- A child class can only extend a single class. An interface can extend multiple interfaces. A class can implement multiple interfaces.
- A child class can define abstract methods with the same or less restrictive visibility, whereas class implementing an interface must define all interface methods as public.
- Abstract Classes can have constructors but not interfaces.
- Interfaces from Java 9 have private static methods.
In Interfaces now:
public static
- supported
public abstract
- supported
public default
- supported
private static
- supported
private abstract
- compile error
private default
- compile error
private
- supported