Inheritance of Dynamic Behavior

When an object is created, it will inherit from its parents their dynamic behavior. Methods that are declared dynamic in a parent, will be copied into the object, and its dynamic behavior preserved.

     a:: {
             super(object) &
             dynamic p/1 &
             p(1) &
             p(2)
          }
     
     b :: {
             super(a)
          }
     
     | ?- b::p(X).
     X = 1 ? ;
     X = 2 ? ;
     no
     | ?- b::asserta(p(3)).
     
     | ?- b::p(X).         
     X = 3 ? ;
     X = 1 ? ;
     X = 2 ? ;
     no
     

Notice that by redeclaring a method to be dynamic in a sub-object, amounts to redefining the method, and overriding of the parent definition will take effect.

     c :: {
             super(a) &
             dynamic p/1
          }
     
     | ?- c::p(X).
     no