Here are some class definitions to help illustrate inheritance:
(define-class A () a) (define-class B () b) (define-class C () c) (define-class D (A B) d a) (define-class E (A C) e c) (define-class F (D E) f)
A
, B
, C
have a null list of superclasses. In this
case, the system will replace the null list by a list which only
contains <object>
, the root of all the classes defined by
define-class
. D
, E
, F
use multiple
inheritance: each class inherits from two previously defined classes.
Those class definitions define a hierarchy which is shown in
Figure 8.2. In this figure, the class <top>
is also shown;
this class is the superclass of all Scheme objects. In particular,
<top>
is the superclass of all standard Scheme
types.
<top> / \\\_____________________ / \\___________ \ / \ \ \ <object> <pair> <procedure> <number> / | \ | / | \ | A B C <complex> |\__/__ | | \ / \ / | D E <real> \ / | F | <integer>
When a class has superclasses, its set of slots is calculated by taking
the union of its own slots and those of all its superclasses. Thus each
instance of D will have three slots, a
, b
and
d
). The slots of a class can be discovered using the
class-slots
primitive. For instance,
(class-slots A) ⇒ ((a)) (class-slots E) ⇒ ((a) (e) (c)) (class-slots F) ⇒ ((e) (c) (b) (d) (a) (f))
The ordering of the returned slots is not significant.