In the simplest case, only one class among C and its superclasses
defines a slot with a given slot name.
If a slot is defined by a superclass of C,
the slot is said to be inherited. The characteristics
of the slot are determined by the slot specifier
of the defining class.
Consider the defining class for
a slot S. If the value of the :allocation
slot
option is :instance, then S is a local slot and each
instance
of C has its own slot named S that stores its own value. If the
value of the :allocation slot
option is :class, then S
is a shared slot, the class
that defined S stores the value, and all
instances of C can access that single slot.
If the :allocation slot option is omitted, :instance is used.

In general, more than one class among C and its
superclasses can
define a slot with a given name.
In such cases, only one slot with
the given name is accessible in an instance
of C, and
the characteristics of that slot are
a combination of the several slot
specifiers, computed as follows:

All the slot specifiers for a given slot name
are ordered from most specific to least specific, according to the order in C's
class precedence list of the classes that define them. All references
to the specificity of slot specifiers immediately below refers to this
ordering.

The allocation of a slot is controlled by the most
specific slot specifier. If the most specific slot specifier
does not contain an :allocation slot option, :instance is used.
Less specific slot specifiers do not affect the allocation.

The default initial value form for a slot
is the value of the :initform slot option in the most specific
slot specifier that contains one. If no slot specifier
contains an :initform slot option, the slot
has no default initial value form.

The contents of a slot will always be of type
(and T1 ... Tn) where T1 ... Tn are
the values of the :type slot options contained in all of the
slot specifiers. If no slot specifier contains the
:type slot option, the contents of the slot will always be
of typet. The consequences of attempting to store in a slot
a value that does not satisfy the type of the slot are undefined.

The set of initialization arguments that initialize a
given slot is the union of the initialization arguments declared in
the :initarg slot options in all the slot specifiers.

A consequence of the allocation rule is that a shared slot can be
shadowed. For example, if a class C1 defines
a slot named S
whose value for the :allocation slot option is :class,
that slot is accessible
in instances of C1 and all of its
subclasses. However, if C2 is a subclass
of C1 and also
defines a slot named S, C1's
slot is not shared
by instances of C2 and its subclasses. When a class
C1 defines a shared slot, any subclass C2 of C1 will share this single slot
unless the defclass form for
C2 specifies a slot of the same
name or there is a superclass
of C2 that precedes C1 in the class precedence list of
C2 that defines a slot of the same name.

A consequence of the type rule is that the value of a slot
satisfies the type constraint of each slot specifier that
contributes to that slot. Because the result of attempting to
store in a slot a value that does not satisfy the type
constraint for the slot is undefined, the value in a slot
might fail to satisfy its type constraint.