The alternative to replacement is termed refinement. Using refinement, the behavior of the parent class and the method in the child care are merged together, to form new behavior. Thus, the parent class method is always executed.

This does a better job of preserving substitutability, as users are guaranteed of at least the behavior of the parent class.

Refinement is the default behavior in some languages, such as Simula and Beta. In other languages that use replacement as the default, refinement can be simulated by having the child class invoke the method inherited from the parent class.

[audio] [real] Text to accompany slide15, in Chapter 11 of An Introduction to Object-Oriented Programming