-abstract class, ex: (public abstract class Employee{...}) -For related classes only, inheritance (last week examples) -extends keyword -contains both instance and static variables -contains both abstract and concrete methods only
An abstract class is only to be sub-classed (inherited from). In other words, it only allows other classes to inherit from it but cannot be instantiated. The advantage is that it enforces certain hierarchies for all the subclasses. In simple words, it is a kind of contract that forces all the subclasses to carry on the same hierarchies or standards.
-interface (public interface Payable{...}) -for unrelated classes (today examples) -contains only static variables -contains only abstract method
An interface is not a class. It is an entity that is defined by the word Interface. An interface has no implementation; it only has the signature or in other words, just the definition of the methods without the body. As one of the similarities to Abstract class, it is a contract that is used to define hierarchies for all subclasses or it defines specific set of methods and their arguments. The main difference between them is that a class can implement more than one interface but can only inherit from one abstract class
Similarities
-both does not allow object to be created
-both contain abstract method that must be override
-both exhibit a polymorphic behavior
Feature | Interface | Abstract class | Multiple inheritance | A class may inherit several interfaces. | A class may inherit only one abstract class. | Default implementation | An interface cannot provide any code, just the signature. | An abstract class can provide complete, default code and/or just the details that have to be overridden. | Access Modfiers | An interface cannot have access modifiers for the subs, functions, properties etc