When return type of a method in child class is not same as the base class method return type, then it is no more a overriding and compiler will complain it as a wrong. When compiler allows the subtype as return type then it is following SOLID principle.