We discuss a declarative characterization of inheritance in logic programming. Our approach is inspired both by existing literature on denotational models for inheritance and by earlier work on a compositional definition of the semantics of logic Programming. We consider a general form of inheritance which is defined with an overriding semantics between inherited definitions and incorporates two different mechanisms known in the literature as static and dynamic inheritance. The result of our semantic reconstruction is an elegant framework which enables us to capture the compositional properties of inheritance and offers a uniform basis for the analysis of the different mechanisms we consider.