Abstract Class
- An abstract class never be instantiated. It is used by extending it.
- Abstract class has generic methods (Abstract methods) common to all sub classes .
- Abstract methods are body less methods (Methods Prototypes) and child classes override the abstract methods.
Example:
abstract class Account
{
public void deposit() {}
public void withdraw() {}
public void checkBalance() {}
public abstract float rateOfInterest();
public abstract String[] services();
}
class SavingAccount extends Account
{
public float rateOfInterest(){}
public String[] services(){}
}
class CurrentAccount extends Account
{
public float rateOfInterest(){}
/* Now this class become abstract , if you not override all the */
/* abstract methods of abstract class, your class become abstract too. */
}
Interface vs Abstract class
| Interface | Abstract Class |
|---|---|
| Main difference is methods of a Java interface are implicitly abstract and cannot have implementations. | A Java abstract class can have instance methods that implements a default behavior. |
| Variables declared in a Java interface is by default final. | An abstract class may contain non-final variables. |
| Members of a Java interface are public by default. | A Java abstract class can have the usual flavors of class members like private, protected, etc.. |
| Java interface should be implemented using keyword "implements"; | A Java abstract class should be extended using keyword "extends". |
| An interface can extend another Java interface only | an abstract class can extend another Java class and implement multiple Java interfaces. |
| A Java class can implement multiple interfaces but it can extend only one abstract class. | A Java class can extend only one abstract class. |
| Interface is absolutely abstract and cannot be instantiated; | A Java abstract class also cannot be instantiated, but can be invoked if a main() exists. |
| Java interfaces are slow as it requires extra indirection. | Java abstract classes are faster than the Interface. |


