Before Java 5.0, Overriding method must match both parameters and return type exactly. In Java 5.0, it introduces a new facility called covariant return type.
In OOPS, a covariant return type of a method is one that can be replaced by a "narrower" type when the method is overridden in a subclass. We can override a method with the same signature but returns a subclass of the object returned.
Case 1: If the return type is a primitive data type or void.
If the return type is void or primitive then the data type of parent class method and overriding method should be the same.
Example: if return type is int, float, string then it should be the same.
Case 2: If the return type is a derived data type.
Due to covariance return type in JDK 5.0+ versions.