1. A method for less restrictive method override in a statically typed programming language, the method comprising: determining whether a first method in a first class has a same name as a second method in a second class that is a subclass of the first class; in response to a determination that the first method has the same name as the second method, determining whether each criterion of one or more criteria are satisfied, wherein the one or more criteria include a criterion that an erasure of a signature of the first class is the same as a signature of the second class; and in response to a determination that the one or more criteria are satisfied, allowing the second method to override the first method; wherein at least one case in a set of cases is true; and wherein the set of cases consists of: a case wherein types of one or more parameters of the first method differ from types of one or more parameters of the second method, and a case wherein a return type of the first method differs from a return type of the second method.