The inheritance mechanism is based on the importation mechanism of
the Prolog module system. When an object is created, whether
loaded from file or at runtime by new/[1,2]
, the method
predicates (i.e. predicates implementing the methods)
visible in the immediate supers are collected. After subtracting from
this set the method predicates that are locally defined, and those
that are specified in the don't-inherit-list , the resulting set
is made visible in the module of the inheriting object by means of
importation. This implies that inherited methods are shared,
expect dynamic methods.
Dynamic methods are inherited in a similar way with the big difference that they are not imported but copied. Even dynamic declarations (methods without clauses) are inherited.
Inheritance from dynamic objects differs in one aspect: Static predicates visible in a dynamic object are not imported directly from the dynamic object but from the static object from where it was imported to the dynamic object. This makes an inheriting object independent of any dynamic ancestor object after its creation.