HERENCIA
La herencia permite crear una nueva clase a partir de una nueva existente heredando la nueva clase sus propiedades. Esto se realiza añadiendo la adición INHERITING FROM a la sentencia de definición de la clase:
CLASS <subclass> DEFINITION INHERITING FROM <superclass>.
La nueva clase <subclass> hereda todos los componentes de la clase ya existente <superclase>.
La nueva clase se conoce como la subclase de la clase de la que procede. La clase original se conoce como la superclase de la nueva clase. Si no se añade ninguna declaración a la subclase, esta contiene los mismos componentes que la superclase. De cualquier manera, sólo los componentes públicos y privados de la superclase son visibles en la subclase. Aunque los componentes privados de la superclase existen en la subclase, no son visibles.
Se pueden declarar componentes privados en una subclase que tengan los mismos nombres que componentes privados de la superclase. Cada clase trabaja con sus propios componentes privados. Los métodos que una subclase hereda de una superclase usan los atributos privados de la superclase y no ningún componente privado de la subclase con el mismo nombre.
Si la superclase no tiene una sección privada, la subclase es una réplica exacta de la superclase. De todos modos podemos añadir nuevos componentes a la subclase. Esto permite convertir a la subclase en una versión especializada de la superclase. Si una subclase es ella misma una superclase de otras clases, se está introduciendo un nuevo nivel de especialización.
Una clase puede tener más de una subclase de las cuales es superclase, pero sólo puede tener una superclase de la cual es subclase. Esto se conoce como herencia simple, en contraposición con la herencia múltiple donde una clase hereda de varias superclases. Cuando una subclase hereda de una superclase que a su vez hereda de otra superclase de la cual es subclase, se forma una estructura de árbol en la cual el grado de especialización aumenta con cada nivel jerárquico que se añada. A la inversa, las clases se hacen más generales hasta que se alcanza el nodo raiz del árbol de herencia. El nodo raiz de todos los árboles de herencia en ABAP Objects es la clase predefinida vacía OBJECT. Esta es la más general de todas las clases posibles ya que no contiene ni atributos ni métodos. Cuando se define una nueva clase no se tiene que especificar explícitamente esta clase como superclase, esta relación está definida implícitamente.
Dentro de un árbol de herencia, dos nodos adyacentes son la superclase y la subclase directamente uno de otro. Las declaraciones de componentes en una subclase están distribuidas a través de todos los niveles superiores en el árbol de herencia.