-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
HERENCIA
Definicin.
Es la capacidad de crear clases que adquieran de manera
automtica los miembros (atributos y
mtodos) de otras clases que ya existen, pudiendo al mismo tiempo
agregar sus propios atributos
y mtodos.
Ventajas:
- La reutilizacin de cdigo. En ocasiones se necesita crear
clases que, adems de sus
propios miembros incluyan los ya definidos en otra. Con la
herencia evitamos reescribir
todos los miembros de la nueva clase.
- Mantenimiento de aplicaciones existentes. A travs de la
herencia, al tener clases con
determinada funcionalidad, y, si en algn momento dado se tiene
la necesidad de ampliar
el funcionamiento de esta, no ser necesario modificar la clase
existente (la cual se puede
seguir utilizando para el tipo de programa que fue diseada) sino
que puede crearse una
clase que herede de la primera, adquiriendo toda su
funcionalidad y aadiendo la suya
propia.
Reglas:
- La clase que va a ser heredada se le conoce como superclase o
clase base, mientras que a
la que hereda se le llama subclase o clase derivada.
- Grficamente, la herencia entre dos clases se representa con
una flecha saliendo de la
subclase hacia la superclase.
- El lenguaje Java no permite la herencia mltiple, es decir, una
subclase no puede heredar
de ms de una superclase.
- Java permite la herencia multinivel, es decir, una subclase B,
que hereda de A, puede
convertirse en superclase de una clase C.
- Una clase puede heredar a muchas subclases.
- Los constructores no se heredan.
- Mediante la utilizacin de la palabra super puede invocarse el
constructor de la superclase
desde la subclase.
- Los miembros privados no se heredan.
- Cuando se quiere impedir la herencia de una clase o un
miembro, se debe anteponer la
palabra reservada final.
- La herencia es creada en el momento que se hace uso de la
palabra reservada extends,
para indicar que se va a crear una clase a partir de otra.
-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
Representacin grfica de la herencia que podemos realizar en
Java:
Permitido: Permitido: Permitido:
No permitido:
Ejemplos:
1) En una clase Persona tenemos dos variables llamadas nombre y
apellido, adems un
mtodo que imprime en pantalla la concatenacin de los dos
atributos (variables).
A partir de Persona cree dos subclases, llmelas Profesor y
Estudiante, no declare
ningn miembro en ellas.
Cree la clase de entrada al sistema (la que tiene el mtodo main)
desde ella cree una
instancia por subclase e invoque los tres miembros que se han
heredado.
Solucin:
-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
En las dos subclases creadas no se han declarado miembros, sin
embargo es posible
hacerlo.
2) Realizar el ejercicio anterior, quite a la clase Persona el
mtodo Nombre, solo deje las
variables; aada el mtodo Estudiar a la clase Estudiante, y en la
clase Profesor agregue
el mtodo Explicar.
Solucin:
SUPERCLASE.
En ella tenemos tres
miembros, 2 variables
Sub clase Estudiante,
creada a partir de la
clase Persona, la cual
pasa a convertirse en
superclase.
Sub clase Profesor,
creada a partir de la
clase Persona, la cual
pasa a llamarse
superclase.
Se han creado
un objeto por
cada subclase,
con estos
podemos
acceder a los
miembros de
que se
heredaron.
Vea como cada miembro heredado
es invocado, aunque no se
declararon en la clase forman parte
de ella. Esa es la gran ventaja de la
herencia, nos evita reescribir
cdigo. En este caso se invocan los
miembros de la clase Estudiante.
-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
Lneas 1-4: se ha declarado una clase llamada Persona, de la cual
se crearn posteriormente dos
subclase.
Lnea 6: se crea la clase Estudiante a partir de la clase
Persona.
Lneas 8-11: se define el mtodo Estudiar, el cual simplemente
imprime un mensaje en pantalla.
Vea como utilizamos las variables nombre y apellido sin que se
hayan declarado en esta clase, pero
como ya vimos, al crear una clase a partir de otra, los miembros
de la superclase pasan a ser parte
de la subclase, y esta ltima tambin puede crear sus propios
miembros, como es el caso del
mtodo que estamos explicando en estas lneas.
-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
Lnea 14: se crea la clase Profesor a partir de la clase
Persona.
Lneas 16-19: se define el mtodo Explicar, el cual simplemente
imprime un mensaje en pantalla.
Vea como utilizamos las variables nombre y apellido sin que se
hayan declarado en esta clase, pero
como ya vimos, al crear una clase a partir de otra, los miembros
de la superclase pasan a ser parte
de la subclase, y esta ltima tambin puede crear sus propios
miembros, como es el caso del
mtodo que estamos explicando en estas lneas.
Lneas 26 y 27: se han creado un objeto de las clases Estudiante
y Profesor.
Lneas 29 y 31: se realiza una invocacin a cada uno de los
miembros de la clase Estudiante. A las
variables nombre y apellido se les est enviado un valor, las
cuales son invocadas con el objeto
respectivo, sin este no sera posible accesar a ellas, lo ltimo y
no menos importante, es que
dichas variables no fueron declaradas en esta clase, se
heredaron de Persona.
Lneas 29 y 31: la explicacin es igual que las lneas anteriores,
pero ahora con el objeto de la clase
Profesor.
3) Realizar el ejercicio dos con las siguientes
particularidades, al mtodo Estudiar de la
clase Estudiante agregue un parmetro tipo Profesor y al mtodo
Explicar de la clase
Profesor agregue parmetro tipo Estudiante. En el mensaje que
imprime cada mtodo,
utilice el parmetro como un objeto para invocar las variables de
la clase a la cual
corresponde el tipo del parmetro.
Explicacin previa:
Qu significa eso que se ha sombreado?
Primero iniciamos haciendo un breve recordatorio, usted sabe y
tiene muy claro cmo se declara
una variable, recuerde, no importa el tipo de dato que tendr la
variable, el proceso para
declararla ser siempre la misma; partiendo de eso, podemos
entonces declarar miembros con
tipos de datos no primitivos de Java (tipos primitivos son todos
aquellos que el lenguaje trae
predefinidos, los que hemos estado utilizando), es decir
aquellos creados por nosotros mismos.
Hasta hoy hemos visto como se crea una clase y hemos aprendido a
hacerlo, lo que realmente
hacemos al declarar una clase es crear un tipo de dato, entonces
pueden crearse miembros
(mtodos o variables) de ese tipo. Cada vez que usted defina un
miembro con un tipo
personalizado, nunca debe olvidar que debe existir la clase,
para que el tipo de dato exista.
Regresando a la pregunta inicial, los parmetros que cree en cada
mtodo mencionado no son
String, int o algn otro tipo ya conocido, son de uno creado por
nosotros, Profesor y Estudiante.
Cuando se define una variable de un tipo creado por nosotros,
esa variable lo que puede guardar
es objetos de la clase a la cual el tipo pertenece; si se trata
de un mtodo, este debe retornar
objetos de la clase que corresponda.
-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
Solucin:
Lnea 8: ya usted not en la parte sombreada, se ha declarado un
parmetro en el
mtodo, el cual se llama pr y su tipo es Profesor; esto ltimo
significa que corresponde a
un valor definido por nosotros mismos, la clase Profesor debe
existir para que puedan
crearse miembros de ese tipo, de lo contrario no es posible.
Lnea 10: preste atencin a lo sombreado, vea que estamos
invocando las variables
nombre y apellido de la clase Profesor, las cuales como ya pudo
notar han sido heredadas
a partir de Persona. Utilizamos el parmetro pr como si de un
objeto se tratara, la razn es
sencilla, al tratarse de un parmetro de ese tipo, este slo podr
almacenar objetos de la
clase de la cual l procede.
-
Universidad Tecnolgica de El Salvador
Programacin Orientada a Objetos Ing. Jos Oswaldo Barrera
Montes
Lnea 16: en la parte sombreada la explicacin es igual que la
lnea 8, pero en esta ocasin
se trata de un parmetro del tipo Estudiante.
Lnea 18: la explicacin dada para la lnea 10 aplica para esta,
aunque aparentemente se
invoque a las mismas variables no lo son, excepto por su
identificador que es igual,
lgicamente porque proceden de la misma superclase. En lo que se
encuentra sombreado
se est invocando las variables de la clase Estudiante, de esa
manera accedemos al
contenido de ellas.
Lneas 35: ponga mucho nfasis en ella, primero con el objeto de
la clase Estudiante se
invoca al mtodo Estudiar que se encuentra en ella, lo nuevo aqu
es el argumento que
enviamos, es este caso lo que se enva es un objeto de la clase
Profesor, ese luego pasa a
almacenarse en el parmetro del mtodo, para que luego este ltimo
pase a utilizar como
instancia.
Lnea 36: la idea de la explicacin de la lnea anterior aplica en
esta, pero ahora se trabaja
con un mtodo de la clase Profesor y se enva como argumento una
instancia de la clase
Estudiante, ya que eso es lo que el mtodo espera.