Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Herencia en Java
La Herencia, que es una forma de reutilización de software en la que las clases se crean absorbiendo los
datos (atributos) y métodos (comportamientos) de una clase existente, y se mejoran con nuevas
capacidades, o con modificaciones en las capacidades ya existentes. La reutilización de software ahorra
tiempo durante el desarrollo de programas.
Al crear una clase, en vez de declarar miembros (variables y métodos) completamente nuevos, el
programador puede designar que la nueva clase herede los miembros de una clase existente. Esta clase
existente se conoce como superclase, y la nueva clase se conoce como subclase.
Una vez creada, cada subclase puede convertirse en superclase de futuras subclases. Una subclase
generalmente agrega sus propias variables y métodos. Por lo tanto, una subclase es más específica que
su superclase y representa a un grupo más especializado de objetos. Generalmente, la subclase exhibe
los comportamientos de su superclase junto con comportamientos adicionales específicos de esta
subclase. La superclase directa es la superclase a partir de la cual la subclase hereda en forma explícita.
Una superclase indirecta se hereda de dos o más niveles arriba en la jerarquía de clases, la cual define
las relaciones de herencia entre las clases.
La experiencia en la creación de sistemas de software nos indica que algunas cantidades considerables
de código tratan con casos especiales, estrechamente relacionados. Cuando los programadores se
preocupan con casos especiales, los detalles pueden oscurecer el panorama general. Con la
programación orientada a objetos, los programadores se enfocan en los elementos comunes entre los
objetos en el sistema, en vez de enfocarse en los casos especiales. A este proceso se le conoce como
abstracción.
Es necesario hacer una diferencia entre la relación “es un” y en la relación “tiene un”. La relación “es un”
representa a la herencia; en este tipo de relación, un objeto de una subclase puede tratarse también
como un objeto de sus superclases. Por ejemplo, un auto “es un” vehículo. En contraste la relación
“tiene un” identifica a la composición, en este tipo de relación, un objeto contiene una o más
referencias a objetos como miembros. Po r ejemplo, un auto tiene un volante de dirección.
Superclases y Subclases
En Java, como en otros lenguajes de programación orientados a objetos, las clases pueden derivar desde
otras clases. La clase derivada (la clase que proviene de otra clase) se llama subclase. La clase de la que
está derivada se denomina superclase.
De hecho, en Java, todas las clases deben derivar de alguna clase. Lo que nos lleva a la cuestión ¿Dónde
empieza todo esto? La clase más alta, la clase de la que todas las demás descienden, es la clase Object,
definida en java.lang.Object es la raíz de la herencia de todas las clases.
Las subclases heredan el estado y el comportamiento en forma de las variables y los métodos de su
superclase. La subclase puede utilizar los ítems heredados de su superclase tal y como son, o puede
Universidad de Montemorelos
Juan Manuel Muñoz Luna 12 de mayo de 2008
Programación Orientada a Objetos Maestría en Ciencias Computacionales
modificarlos o sobrescribirlos. Por eso, según se va bajando por el árbol de la herencia, las clases se
convierten en más y más especializadas.
Un problema con la herencia es que una subclase puede heredar métodos que no necesita, o que no
debe tener. A pesar de que un método de superclase sea apropiado para una subclase, a menudo esa
subclase requiere que el método realice su tarea de una manera especifica para la subclase. En dichos
casos, la subclase puede sobrescribir (redefinir) el método de la superclase con una implementación
apropiada.
Los miembros public de una clase son accesibles en cualquier parte en donde el programa tenga una
referencia al objeto de esa clase, o una de sus subclases. Los miembros prívate de una clase son
accesibles sólo en los métodos de la clase. Estos miembros prívate no se heredan. El uso de acceso
protected ofrece un nivel intermedio de acceso entre puclic y prívate. Cuando un método de la subclase
sobrescribe al método de la superclase, éste último puede utilizarse desde la subclase si se antepone a
su nombre la palabra clave super y un punto (.).
Si las clases en su jerarquía de clases tienen sus propios métodos finalize, el método finalize de la
subclase debe invocar al método finalize de la superclase como su última acción, para asegurar que
todas las partes de un objeto se finalicen apropiadamente en case de que el recolector de basura
reclame la memoria de ese objeto. Cuando se llama al método finalize de un objeto de la subclase, este
método realiza su tarea y luego debe invocar al método finalize de la siguiente superclase en la
jerarquía. Este proceso debe repetirse hasta que se llame al finalizador de la superclase Object. Después
la memoria se vuelve disponible para ser utilizada por nuevos objetos.
Universidad de Montemorelos