Está en la página 1de 8

TEMA 09 - MEJORA DE LA ESTRUCTURA MEDIANTE LA

HERENCIA (CAPÍTULO 10)

● EL EJEMPLO NETWORK
• Soporta un gestor de noticias con posts.

• Almacena posts de texto y posts de fotos.

– MessagePost: mensaje de texto multilínea.

– PhotoPost: foto y caption.

• Operaciones posibles sobre los posts: E.j., búsqueda, mostrar y eliminar.

• Duplicación de código

– Las clases MessagePost y PhotoPost son muy similares (una gran parte son idénticas)

– Hace que el mantenimiento sea más difícil y conlleve más trabajo

– Aumenta el peligro de la aparición de bugs por mantenimiento incorrecto

• La duplicación de código también existe en la clase NewsFeed


● USANDO LA HERENCIA

• defino una superclase : Post

• defino subclases para MessagePost y PhotoPost

• la superclase define atributos comunes (a través de sus campos)

• las subclases heredan los atributos de la superclase

• las subclases añaden sus propios atributos

● JERARQUÍA EN LA HERENCIA
▪ SUPERCLASE

Llamamos superclase a toda clase que es ampliada por otra clase.

▪ SUBCLASES

Llamamos subclase a una dase que amplía (hereda de) otra dase. La subclase hereda todos los
campos y métodos de su superclase.
● HERENCIA Y CONSTRUCTORES
Las clases que están vinculadas por relaciones de herencia forman una jerarquía de herencia.

▪ EL CONSTRUCTOR DE UNA SUBCLASE debe siempre invocar al constructor de su superdase


como primera instrucción. Si el código fuente no incluye esa llamada, Java intentará insertar una
llamada automáticamente.
▪ LLAMADA AL CONSTRUCTOR DE LA SUPERCLASE

• Los constructores de las subclases deben contener una llamada 'super'.

• Si no se escribe, el compilador inserta una llamada (sin parámetros)

– siempre funciona si la superclase tiene un constructor sin parámetros

• Debe ser la primera sentencia en el constructor de la subclase.

● SUBCLASES Y SUBTIPOS
Subtipo el tipo especificado por la definición de una subclase es un subtipo del tipo
correspondiente a su superclase.

• Las clases define tipos.

• Las subclases definen subtipos.

• Los objetos de las subclases pueden usarse donde se requieren objetos de los supertipos. (Esto
se llama sustitución .)

▪ SUBTIPOS Y ASIGNACIÓN

Los objetos de la subclase pueden asignarse a las variables de la superclase (pe ro no al revés)
● SUBTIPADO
Al principio teníamos:

Ahora tenemos un método que sirve para ambos:

Invocamos este método con:

(le
pasamos un objeto no del tipo Post, sino del tipo PhotoPost => sustitución

● SUBTIPOS Y PASO DE PARÁMETROS


Los objetos de la subclase pueden pasarse como parámetros a los métodos de la superclase
● VARIABLES POLIMÓRFICAS
• Las variables de tipo objeto en Java son polimórficas. (Pueden albergar objetos de más de un
tipo)

• Pueden albergar objetos del tipo declarado o de los subtipos del tipo declarado.

● CASTING
• Es posible asignar un subtipo a un supertipo pero ¡no podemos asignar (directamente) un
supertipo a un subtipo!

• El casting resuelve esto: (¡solo sirve si el vehículo realmente es de tipo Car!)

• Entre paréntesis se indica el tipo de objeto.

• Se usa para evitar la ‘pérdida de tipo’

• El objeto no se modifica en absoluto.

• En tiempo de ejecución se realiza una comprobación para asegurarse de que el objeto es


realmente de dicho tipo:

– ¡En caso de no serlo se lanza una ClassCastException !

• Usése con moderación.

● LA CLASE OBJETO
Todas las clases que no tienen una superclase explícita tienen a Obj ect como superclase.
Todas las clases heredan de Object
● COLECCIONES POLIMÓRFICAS
• Todas las colecciones son polimórficas.

• Todos los elementos podrían ser simplemente del tipo Object.

public void add(Object element)

public Object get(int index)

• Normalmente se evita usando un parámetro de tipo con la colección.

• Un parámetro de tipo limita el grado de

polimorfismo: ArrayList<Post>

• Al usarlo, los métodos de la colección también tendrán el mismo tipo.

• Sin un parámetro de tipo, se asume

ArrayList<Object>

– Más sencillo obtener un aviso “unchecked or unsafe operations” warning.

– Más probable la necesidad de usar casting.

También podría gustarte