\HeaderA{SClassExtension-class}{Class to Represent Inheritance (Extension) Relations}{SClassExtension.Rdash.class}
\keyword{classes}{SClassExtension-class}
\begin{Description}\relax
An object from this class represents a single \sQuote{is}
relationship; lists of these objects are used to represent all the
extensions (superclasses) and subclasses for a given class.  The
object contains information about how the relation is defined and
methods to coerce, test, and replace correspondingly.
\end{Description}
\begin{Section}{Objects from the Class}
Objects from this class are generated by \code{\LinkA{setIs}{setIs}},
from direct calls and from the \code{contains=} information in a call to \code{\LinkA{setClass}{setClass}}, and from class unions created by \code{\LinkA{setClassUnion}{setClassUnion}}.
In the last case, the information is stored in defining the \emph{subclasses} of the union class (allowing unions to contain sealed classes).
\end{Section}
\begin{Section}{Slots}
\describe{
\item[\code{subClass,superClass}:] The classes being extended:
corresponding to the \code{from}, and \code{to} arguments to \code{\LinkA{setIs}{setIs}}. 
\item[\code{package}:] The package to which that class belongs. 
\item[\code{coerce}:] A function to carry out the as() computation
implied by the relation.  Note that these functions should
\emph{not} be used directly.  They only deal with the
\code{strict=TRUE} calls to the \code{\LinkA{as}{as}} function, with
the full method constructed from this mechanically. 
\item[\code{test}:] The function that would test whether the
relation holds.  Except for explicitly specified \code{test}
arguments to \code{\LinkA{setIs}{setIs}}, this function is trivial. 
\item[\code{replace}:] The method used to implement \code{as(x,
    Class) <- value}.
\item[\code{simple}:] A \code{"logical"} flag, \code{TRUE} if this
is a simple relation, either because one class is contained in the
definition of another, or because a class has been explicitly
stated to extend a virtual class.  For simple extensions, the
three methods are generated automatically.
\item[\code{by}:] If this relation has been constructed
transitively, the first intermediate class from the subclass. 
\item[\code{dataPart}:] A \code{"logical"} flag, \code{TRUE} if
the extended class is in fact the data part of the subclass.  In
this case the extended class is a basic class (i.e., a type). 
\item[\code{distance}:] The distance between the two classes,
1 for directly contained classes, plus the number of generations between otherwise.   }
\end{Section}
\begin{Section}{Methods}
No methods defined with class \code{"SClassExtension"} in the
signature.
\end{Section}
\begin{SeeAlso}\relax
\code{\LinkA{is}{is}},
\code{\LinkA{as}{as}}, and the
\code{\LinkA{classRepresentation}{classRepresentation.Rdash.class}} class.
\end{SeeAlso}

