Abstract classes
Abstract classes are classes that contain one or more abstract methods. An abstract method is a method that is declared, but contains no implementation An Abstract class can't be instantiated
Abstract class is a class which contain one or more abstract methods, which has to be implemented by sub classes.
Abstract class is a Class prefix with a abstract keyword followed by Class definition.
Abstract class contains one or more abstract methods.
Abstract classes are useful in a situation that Some general methods should be implemented and specialization behavior should be implemented by child classes. Interfaces are useful in a situation that all properties should be implemented.
- If even a single method is abstract, the whole class must be declared abstract.
- Abstract classes may not be instantiated, and require subclasses to provide implementations for the abstract methods.
- You can’t mark a class as both abstract and final.
abstract class testAbstractClass {
protected String myString;
public String getMyString() {
return myString;
}
public abstract string anyAbstractFunction();
}
An interface is a description of a set of methods that conforming implementing classes must have.
Interface is a Java Object containing method declaration and doesn't contain implementation.
The classes which have implementing the Interfaces must provide the method definition for all the methods .
Interface contains all abstract methods and final declarations
In Java Interface defines the methods but does not implement them. Interface can include constants. A class that implements the interfaces is bound to implement all the methods defined in Interface.
- You can’t mark an interface as final.
- Interface variables must be static.
- An Interface cannot extend anything but another interfaces.
public interface sampleInterface {
public void functionOne();
public long CONSTANT_ONE = 1000;
}
Similarities:
Neither Abstract classes or Interface can be instantiated
Differences: -
Abstract Class | 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 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. | An 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 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. |
Use Interfaces when…
- You see that something in your design will change frequently.
- If various implementations only share method signatures then it is better to use Interfaces.
- you need some classes to use some methods which you don't want to be included in the class, then you go for the interface, which makes it easy to just implement and make use of the methods defined in the interface.
Use Abstract Class when…
- If various implementations are of the same kind and use common behavior or status then abstract class is better to use.
- When you want to provide a generalized form of abstraction and leave the implementation task with the inheriting subclass.
- Abstract classes are an excellent way to create planned inheritance hierarchies. They're also a good choice for nonleaf classes in class hierarchies.