Generally speaking, there are two models that provide the semantics that will give a meaning to this situation.
The first of these is replacement, and is the general model we have used in explanations up to this point. In replacement semantics, the child class behavior totally obscures the behavior inherited from the parent class, hiding it completely. This is sometimes called the American school of object-oriented programming, because it is the model found in languages of American origin, such as Smalltalk, C++, and Java.
There is an alternative. In languages that follow the ''scandinavian'' school of OOP, the behavior of the child class and that of the parent class is always merged, so that the parent class behavior is never lost. This model is found in languages of scandinavian origin, such as Simula and Beta.
As we will show in this chapter, replacement languages usually provide a mechanism to simulate refinement, whereas if refinement is the default than replacement is generally quite difficult.