Abstract Classes:
1). A class defined as abstract cannot be instantiated. Meaning, you cannot call just/only new AbstractClass().You need to override all the methods that are marked as abstract as well.(See AbstractMain)
2). Abstract keyword is non access modifier.
3). When a method is marked as abstract, there should not be any implementation for the method.
4). Abstract methods have to be overridden in the sub classes.
5). Abstract classes NEED NOT have abstract methods. Those methods which do not have abstract defined, should be implemented. Meaning there should be a implementation code for this method right in this abstract class method body.
6). If there is at–least one abstract method defined in the whole class, then that class should be declared as abstract.
7). Classes and Methods marked as private cannot be abstract
8). Classes and Methods marked as static cannot be abstract.
9). Classes and Methods marked as final cannot be abstract.
10). Abstract classes can have default and as well as overloaded constructors. When no constructor is defined – a default constructor will be generated by compiler.
11). Constructors of abstract classes are invoked when a subclass object is created. You can call the superclass constructor by calling super().
12). Abstract classes hides the functionality of those methods that are defined as abstract. The actual functionality of the abstract methods are exposed by the implementation classes.
13). Abstract Method Overloading signatures are supported in abstract classes.
14). By making this class as abstract and implementing the methods as well, will not give any compile time error., but gives a run time error after Instantiating the AbstractSubClass.
15). @Override – Not necessary to provide this annotation, because, Compiler by default takes care of overriding, when it see’s extends keyword.
Interfaces:
1). Interfaces does not have any method implementation.
2). All methods in an interface are public and/or abstract.
3). Any field that is declared, is public and static.
4). There is no multiple inheritance in Java. Which means, any Java class cannot extend more than one class at a time. Instead there is a Multiple Interface Inheritance. Which means, any Java can implement/extends more than one interface.
5). Any Java class that implements any interface, will be having a IS–A relationship, between the Java Class and the interface.
6). If a method deceleration in a interface is abstract, the whole interface need not be declared as abstract, this is unlike abstract classes.
7). Java does not support multiple inheritance, because of the Diamond of Death Problem.
8). Method Overriding is allowed in Interfaces. Each method signature in an interface is unique. Meaning, you can have multiple methods of same name with different arguments.
9). Multiple Interface Inheritance example can extend any number of interfaces.
Ex: public interface MultipleInterfaceImplementation extends InterfaceExample,AnotherInterface
* here InterfaceExample and AnotherInterface are both interfaces.
Source code: https://github.com/chouhan/CoreJavaBasics