In object-oriented programming, a subclass typically extends its superclass by defining additional member variables. If a superclass instance is assigned its value from a subclass instance, member variables defined in the subclass cannot be copied, since the superclass has no place to store them. This is a natural and unavoidable consequence of assignment by value from subclass objects. The term object slicing is sometimes used to refer to this aspect of assignment by value to a superclass instance.
Object slicing is also used to refer to a more subtle, problematic, case in which an object assignment by value appears to be to a superclass instance but is actually to a subclass instance. From the perspective of object memory layout, the member variables of the source instance can be thought of as having been "sliced off", leaving the corresponding member variables in the destination instance unchanged. It is this partial assignment (arguably a more apt term) that often surprises programmers and leads to unintended consequences.
Unexpected object slicing can happen in languages such as C++ in which assignment by value is not polymorphic. It is not possible in the D programming language, which allows object inheritance only through reference types.
Famous quotes containing the word object:
“I find very reasonable the Celtic belief that the souls of our dearly departed are trapped in some inferior being, in an animal, a plant, an inanimate object, indeed lost to us until the day, which for some never arrives, when we find that we pass near the tree, or come to possess the object which is their prison. Then they quiver, call us, and as soon as we have recognized them, the spell is broken. Freed by us, they have vanquished death and return to live with us.”
—Marcel Proust (18711922)