Transcript superclase

FUNDAMENTALS OF THE JAVA
PROGRAMMING LANGUAGE
(SL-110)
CAPÍTULO 12: HERENCIA
Ing. Ronald Criollo
AGENDA
Herencia y Programación orientada a objetos.
 Lenguaje JAVA soporta herencia
 Modificadores de Acceso y Herencia
 Sobreescritura
 Uso de THIS y SUPER
 Herencia y Constructores.
 Extendiendo las Clases.

HERENCIA
Objetos son creados para modelar COSAS.
 Las COSAS podrían ser diferentes, pero tienen
muchos atributos en común
 Podemos crear un objeto que modele los
atributos en común

HERENCIA
ABSTRACCION



Una SUPERCLASE puede ser usada para modelar
los atributos comunes o comportamiento.
A veces, la SUPERCLASE no puede ser un Objeto
en si.
La SUPERCLASE puede definir el comportamiento
que las SUBCLASES deben implementar
SUPERCLASES Y SUBCLASES
MODELANDO SUPERCLASES Y SUBCLASES
MODELANDO SUPERCLASES Y SUBCLASES
PROBLEMA DE HERENCIA MULTIPLE



Algunos lenguajes permiten que una clase pueda
tener mutiples SUPERCLASES.
Herencia provee la relacion “ES UN”.
Multiple Herencia crea conflictos con los atributos y
comportamientos
PALABRAS CLAVES EN LA HERENCIA





extends: Declara que la actual clase es una
SUBCLASE de otra.
super: usada por la SUBCLASE para acceder a los
atributos o metodos de la SUPERCLASE.
protected: es un modificador de acceso que restringe
el acceso a las SUBCLASES.
abstract: declara que una clase es una INTERFACE
implements: permite a una clase tomar las
propiedades de una INTERFACE
ROL DE LOS MODIFICADORES DE ACCESO EN LA
HERENCIA

La subclase hereda todos los atributos y
comportamientos de la SUPERCLASE excepto los
declarados como privado.
ROL DE LOS MODIFICADORES DE ACCESO EN LA
HERENCIA
SOBRESCRITURA DE METODOS




SUBCLASE podria necesitar personalizar el
comportamiento de las SUPERCLASES.
La SUBCLASE define un metodo que ya existe en la
SUPERCLASE.
Cuando este metodo es llamado, es usado el que es
definido en la SUBCLASE.
El metodo de la SUPERCLASE es accesible desde la
SUBCLASE usando la palabra clave SUPER .
SOBRESCRITURA DE METODOS
SOBRECARGA VS SOBREESCRITURA




Sobreescritura es cuando un metodo en la SUBCLASE
es diseñado para reemplazar un metodo del mismo
nombre en la SUPERCLASE.
Sobrecarga es tener varios metodos con el mismo
nombre en la misma clase con distinta definición.
Sobreescritura
permite
personalizar
el
comportamiento.
Sobrecarga crea varias formas de hacer la misma
cosa.
MANEJO DE CONSTRUCTORES EN LA HERENCIA




Contructores pueden ser sobrecargados.
Cuando una SUBCLASE es construida, el constructor
de la SUPERCLASE tambien es llamado.
El constructor de la SUBCLASE puede llamar
explicitamente al constructor de la SUPERCLASE
usando la palabra clave SUPER.
Si no hay un constructor correspondiente en la
SUPERCLASE, la compilación FALLA.
DECLARANDO UNA SUBCLASE

Sintaxis
[class_modifier] class class_identifier extends superclass_identifier
Ejemplo
DECLARANDO UNA SUBCLASE
IMPORT

Sintaxis
import package_name.class_name;
import package_name.*
Ejemplo
USANDO NOMBRE COMPLETO

Sintaxis
package_name.class_name
Ejemplo
POLIMORFISMO
POLI = Multiple.
 MORFISMO = Formas.


Implica que un mismo Objeto puede tomar diversas
formas.
Figura a = new Circulo();
Figura b = new Triangulo();
CLASES ABSTRACTAS
Son SUPERCLASES que modelan de una forma
mas generalizada los atributos y
comportamientos.
 Las clases ABSTRACTAS definen metodos que
no tienen cuerpo pero que deben ser
sobreescritos.
 Las clases ABSTRACTAS no saben como es el
comportamiento general de las SUBCLASES,
por eso fuerzan a crear en las SUBCLASES un
comportamiento con este nombre.

INTERFACES
Java impide el uso de Herencia Multiple.
 Sin embargo, una clase puede heredar
atributos (STATIC y FINAL) y comportamientos
de multiples fuentes usando INTERFACES.
 Las INTERFACES son como una plantilla para
el comportamiento pero no la definen, es por
eso que fuerzan a que las SUBCLASES las
definan

INTERFACES
CLASE, CLASE ABSTRACTA E INTERFAZ
CLASE, CLASE ABSTRACTA E INTERFAZ

En una clase, al definir Animal tendríamos que
implementar los métodos dibuja() e imprime(). Las clases
hijas no tendrían por qué implementar los métodos, a no
ser que quieran adaptarlos a sus propias necesidades.

En una clase abstracta podríamos implementar los
métodos que nos interese, dejando sin implementar los
demás (dejándolos como métodos abstractos). Dichos
métodos tendrían que implementarse en las clases hijas.

En un interfaz no podemos implementar ningún método en
la clase padre, y cada clase hija tiene que hacer sus
propias implementaciones de los métodos. Además, las
clases hija podrían implementar otros interfaces.
CLASES FINAL
Una clase FINAL se declara como la clase que
termina una cadena de herencia.
 No se puede heredar de una clase final. Por
ejemplo, la clase Math es una clase final.
 Se usa la palabra clave FINAL para declarar un
atributo INMUTABLE (CONSTANTE).
 Tambien se usa la palabra clave FINAL para
impedir que un metodo sea sobreescrito en
una SUBCLASE.
