Difference Between abstract classes and interfaces:
Here is the difference between abstract classes and Interfaces:
|An abstract class can provide complete, default code and/or just the details that have to be overridden.||An interface cannot provide any code at all, just the signature.|
|In the case of abstract class, a class may extend only one abstract class.||A Class may implement several interfaces.|
|An abstract class can have non-abstract methods.||All methods of an Interface are abstract.|
|An abstract class can have instance variables.||An Interface cannot have instance variables|
|An abstract class can have any visibility: public, private, protected.||Interface visibility must be public (or) none.|
|If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly||If we add a new method to an Interface then we have to track down all the implementations of the interface and define an implementation for the new method|
|An abstract class can contain constructors||An Interface cannot contain constructors|
|Abstract classes are fast||Interfaces are slow as it requires extra indirection to find corresponding method in the actual class|
Type of methods:Interface can have only abstract methods. Abstract class can have abstract and non-abstract methods. From Java 8, it can have default and static methods also.
Final Variables: Variables declared in a Java interface are by default final. An abstract class may contain non-final variables.
Type of variables: Abstract class can have final, non-final, static and non-static variables. Interface has only static and final variables.
Implementation: Abstract class can provide the implementation of interface. Interface can’t provide the implementation of abstract class.
Inheritance vs Abstraction: A Java interface can be implemented using keyword “implements” and abstract class can be extended using keyword “extends”.
Multiple implementation: An interface can extend another Java interface only, an abstract class can extend another Java class and implement multiple Java interfaces.
Accessibility of Data Members: Members of a Java interface are public by default. A Java abstract class can have class members like private, protected, etc.