Immediate super-objects are declared by defining the method
super/2 within the object. (Any definition
super(Super) is transformed to
super(Super,[])). The objects declared by super/2
are the immediate objects from which a method is inherited if not
defined within the object.  This implies that the inheritance mechanism
is an overriding one.  One could possibly have a union inheritance,
whereby all clauses defining a method are collected from the super
hierarchy and executed in a Prolog fashion.  This can easily be
programmed in SICStus Objects, using delegation to super objects.
   
The following example shows some objects used for animal classification.
     animal :: {}.
     
     bird :: {
             super(animal) &
             skin(feather) &
             habitat(tree) &
             motions(fly)
             }.
     
     penguin :: {
             super(bird) &
             habitat(land) &
             motions(walk) &
             motions(swim) &
             size(medium)
             }.
     
     | ?- penguin :: motions(M).
     M = walk ;
     M = swim ;
     no
     
     | ?- penguin :: skin(S).
     S = feather ;
     no
     
   The following is an example of multiple inheritance: an object john is
both a sportsman and a professor:
     john :: {
             super(sportsman) &
             super(professor) &
             :
             }.
     
   Inheritance will give priority to the super-objects by the order defined in
the super/2 method.  Therefore in the above example John's
characteristics of being a sportsman will dominate those of being professor. 
Other kinds of hierarchy traversal can be programmed explicitly using the
delegation mechanism.