A redefinition occurs when a child class changes the type
signature of a method in the parent class.
Two different types of rules are used to resolve name:
The merge model. The scope of the child is merged with the scope
of the parent.
The hierarchical model. Scopes are separate. Search is
made for first scope containing name, then for best fit within the scope.