El lenguaje PL/SQL admite la herencia simple de tipos de objetos, mediante la cual, puedes definir subtipos de los tipos de objeto. Estos subtipos, o tipos heredados, contienen todos los atributos y métodos del tipo padre, pero además pueden contener atributos y métodos adicionales, o incluso sobreescribir métodos del tipo padre.
Para indicar que un tipo de objeto es heredado de otro hay que usar la palabra reservada UNDER
, y además hay que tener en cuenta que el tipo de objeto del que hereda debe tener la propiedad NOT FINAL
. Por defecto, los tipos de objeto se declaran como FINAL
, es decir, que no se puede crear un tipo de objeto que herede de él.
Si no se indica lo contrario, siempre se pueden crear objetos (instancias) de los tipos de objeto declarados. Indicando la opción NOT INSTANTIABLE
puedes declarar tipos de objeto de los que no se pueden crear objetos. Estos tipos tendrán la función de ser padres de otros tipos de objeto.
En el siguiente ejemplo puedes ver cómo se crea el tipo de objeto Persona
, que se utilizará heredado en el tipo de objeto UsuarioPersona
. De esta manera, este último tendrá los atributos de Persona
más los atributos declarados en UsuarioPersona
. En la creación del objeto puedes observar que se deben asignar los valores para todos los atributos, incluyendo los heredados.
CREATE TYPE Persona AS OBJECT (
nombre VARCHAR2(20),
apellidos VARCHAR2(30)
) NOT FINAL;
/
CREATE TYPE UsuarioPersona UNDER Persona (
login VARCHAR(30),
f_ingreso DATE,
credito NUMBER
);
/
DECLARE
u1 UsuarioPersona;
BEGIN
u1 := NEW UsuarioPersona('nombre1', 'apellidos1', 'user1', '01/01/2001', 100);
dbms_output.put_line(u1.nombre);
END;
/