Abstract Classes and Methods
Earlier, we discussed interfaces and how they can be useful when we wish to have a contract with our classes on the methods they have to implement. We then saw how we can only cast classes that share the same hierarchy tree.
Java also allows us to have classes with abstract methods that all classes inheriting from it must implement. Such a class is referred to as an abstract class and is denoted by using the abstract keyword after the access modifier.
When we declare a class as abstract, any class inheriting from it must implement the abstract methods in it. We cannot instantiate abstract classes:
public abstract class AbstractPerson { //this class is abstract and cannot be instantiated }
Because abstract classes are still classes in the first place, they can have a logic and state of their own. This gives them more advantages compared to interfaces whose methods are empty. In addition, once we inherit from an abstract class, we can perform typecasting along...