Inheritance

DLP supports static inheritance, by code sharing, as do Smalltalk, Eiffel and C++. For a discussion of dynamic inheritance, by delegation, see section prototypes. As an example of inheritance in DLP, look at the refinement of the travel object into a veritable agency. See slide dlp-inheritance.
  object agency : travel { 
\fbox{agency}
agency() :- accept( any ), agency(). book(X,Y) :- reachable(X), price(X,Y). price(amsterdam,5). \$...\$ }

slide: DLP -- inheritance

An agency offers the user, in addition to the functionality offered by travel, the opportunity to book for a particular destination and be informed of its price.

Inheritance in DLP conforms to the subsumption relation for logical theories, in that it extends the functionality of a given object in a strict manner. DLP allows for multiple inheritance and even checks for cycles to protect the user from repetitions or cycles in the inheritance chain.