0% encontró este documento útil (0 votos)
44 vistas

Presentacion Java XI

El documento describe los conceptos fundamentales de herencia en Java. La herencia permite que una clase subclase herede atributos y comportamientos de una clase superclase. Las subclases pueden extender o redefinir el comportamiento de las superclases. Todas las clases en Java heredan de la clase Object que proporciona funcionalidad básica común a todos los objetos.

Cargado por

Yossiel Castillo
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
44 vistas

Presentacion Java XI

El documento describe los conceptos fundamentales de herencia en Java. La herencia permite que una clase subclase herede atributos y comportamientos de una clase superclase. Las subclases pueden extender o redefinir el comportamiento de las superclases. Todas las clases en Java heredan de la clase Object que proporciona funcionalidad básica común a todos los objetos.

Cargado por

Yossiel Castillo
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PPT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 36

Programación Java

(Herencia)

Prof. Juan P. Valdez


(2015)
Herencia
 En terminología java, la clase existente se
denomina superclase. La clase derivada de una
superclase se denomina subclase. También se
conoce a la superclase como clase padre y una
subclase se conoce como clase hija, clase
extendida o clase derivada.

Persona

Empleado

Estudiante

Contador
Jerarquía de clases Ingeniero
Herencia
 La figura anterior contiene la definición de una clase para
estudiantes.

 Un estudiante es una persona, por lo que se puede definir la


clase estudiante como derivada de la clase persona.

 Una clase derivada es una clase que se define añadiendo


variables de instancia y métodos una clase existente.

 La clase persona es la clase base y la clase estudiante es la


clase derivada. Las clases derivadas tienen todas las
variables de instancia y los métodos que se necesiten añadir.
Herencia
 La definición de una subclase tiene la sintáxis
siguiente:

Public class nombre_clase extends clase_base

Un ejemplo puede ser :

public class estudiante extends persona

Nota:
La herencia es siempre transitiva, de modo que una clase puede
heredar características de superclases de muchos niveles.
Herencia
 Si la clase perro es una subclase de la clase
mamífero, y la clase mamífero es una subclase
de la clase animal, entonces un perro heredará
atributos tanto de mamífero como de animal.

 Se pueden reutilizar o cambiar los métodos de


las superclases y se pueden añadir nuevos
datos y nuevos métodos de las subclases.
Herencia
 Las subclases pueden anular (redefinir) el
comportamiento heredado de la clase padre.

 Por ejemplo, la clase Ornitorrinco redefine el


comportamiento heredado de la clase
mamífero, ya que los ornitorrincos ponen
huevos.
Herencia
Persona

Empleado

Estudiante Ingeniero

Herencia y Redefinición de comportamientos


La Clase BASE Object
 En java todas las clases utilizan herencia. A menos
que se especifique lo contrario, todas las clases se
derivan de una clase raíz, denominada object.

 La clase object proporciona la funcionalidad mínima


garantizada que es común a todos los objetos.

 Si no se proporciona explícitamente ninguna clase


padre, se supone implícitamente la clase object, así las
dos siguientes definiciones de clase son similares:
Herencia
Public class clase_heredada
{
public static void main (String [] args)
{
System.out.println(“Clase heredada”)
}
}

import java.lang.*;
Public class clase_heredada extends object
{
public static void main (String [] args)
{
System.out.println(“Clase heredada”)
}
}
La Clase BASE Object
 La clase object define e implementa el
comportamiento que cada clase del sistema necesita.

 La clase object está en el nivel más alto de la jerarquía


y se encuentra definida en la biblioteca java.lang.
Cada clase del sistema java es un descendiente,
directo o indirecto de la clase object.
La Clase BASE Object
 Esta clase define el estado básico y el comportamiento
que todos los objetos deben tener, tales como:
comparar un objeto con otro objeto, convertir a una
cadena, esperar una variable condición, notificar a
otros objetos que ha cambiado una variable condición
o devolver la clase del objeto.

 La clase object proporciona una funcionalidad mínima


que garantiza un comportamiento común a todos los
objetos.

 Estos objetos incluyen los métodos siguientes:


La Clase BASE Object
Método Funcionalidad

Public Boolean equals (java.lang.object obj) Determina si el objeto del argumento es el


mismo que el receptor.

Public final java.lang.Class getClass() Devuelve la clase del receptor, un objeto de tipo
class. Devuelve un valor aleatorio para este
objeto. Este método debe también ser
anulado cuando el método equals se
cambia.
Public int hashcode() Devuelve un valor aleatorio para este objeto.
Este método debe también ser anulado
cuando el método equals se cambia.

Public java.lang.String toString() Convierte el objeto a un valor de cadena. Este


método se anula también con frecuencia.
La Clase BASE Object
 Los métodos de la clase object que se pueden
anular o redefinir son:
 clone
 equals
 finalize
 toString

 Los métodos de la clase object que no se pueden


anular, pues son final, son:
 getClass
 notify
 notifyAll
 wait
La Clase BASE Object
 Se puede usar el método clone para crear objetos de
otros objetos del mismo tipo, por defecto, los objetos
no son clónicos, de modo que la implementación de
este método del objeto lanza una excepción
CloneNotSupportedException.

 Si se desea que la clase sea clónica, se debe


implementar la interfaz cloneaable y anular este
método.

Protected Object clone() throws CloneNotSupportedException;


La Clase BASE Object
 El método equals se utiliza para determinar la
igualdad de dos objetos. El método devuelve
true si los objetos son iguales y false en caso
contrario. El siguiente código comprueba la
igualdad de dos enteros (integer).

integer primero = new integer(1);


integer segundo = new integer(1);
if (primero.equals(segundo))
System.out.println(“Los objetos son iguales”);
La Clase BASE Object
 El método finalize no hace nada. Se redefine
finalize para ejecutar operaciones especiales de
limpieza antes de que se recoleccione la basura
correspondiente al objeto o cuando el programa
termina.
Protected void finalize()
// La llamada
System.runFinalizersOnExit(true);

 Solicita la ejecución de los métodos finalize


cuando un programa termina. Sin la petición de
los métodos finalize no se invocan cuando termina
un programa.
La Clase BASE Object
 El método toString de object devuelve una representación
String del objeto. Se puede utilizar toString con
System.out.println para visualizar una representación de
texto de un objeto, tal como el hilo (thread) actual.

System.out.println(thread.currentThread().toString());

 La representación string de un objeto depende totalmente


del objeto. La representación string de un objeto integer es
el valor entero visualizado como texto. La representación
string de un objeto thread contiene diversos atributos sobre
el hilo tal como su nombre y prioridad. Por ejemplo la
salida de la instrucción anterior podría ser:
 Thread[main,5,main]
La Clase BASE Object
 El método getclass es un método final que devuelve una
representación en tiempo de ejecución de la clase del
objeto. El método devuelve un objeto class. Se puede
consultar el objeto class para obtener diversas
informaciones sobre la clase, tal como su nombre, su
superclase y los nombres de las interfaces que implementa.

public final java.lang.Class getClass()

Ejemplo:
void imprimir_nombre_objeto(Object obj)
{
System.out.println(“La clase del objeto es ” +
obj.getClass().getName());
}
La Clase BASE Object
 Si el objeto obj pasado como parámetro
fuera de tipo integer, la llamada a este
método devolvería:

La clase del objeto es java.lang.integer


Ventajas de la Herencia
 Facilidad en la modificación de clases: evita la
modificación del código existente al utilizar la herencia
para añadir nuevas características o cambiar
características existentes.

 Extracción de la comunalidad de clases diferentes: Evita


la duplicación de estructuras/código idéntico o similar en
clases diferentes. Sencillamente se extraen las partes
comunes para formar otra clase y se permite que esta sea
heredada por las demás.

 Organización de objetos en Jerarquía: Se crean grupos


de objetos que conservan entre sí una relación “es un tipo
de”. Por ejemplo una camioneta en un tipo de vehículo.
Ventajas de la Herencia
 Adaptación de programas para trabajar en
situaciones similares, pero diferentes: Evita la
escritura de grandes programas, si la aplicación,
sistema informático, formato de datos o modo de
operación es solo ligeramente diferente, pues se
debe utilizar la herencia para modificar el código
existente.
Superclases y Subclases
 Una clase extendida hereda todos los miembros de
superclases, excepto constructores y finalize, y añade
nuevos miembros específicos.

 En esencia, una subclase hereda las variables y


métodos de su superclase y todos sus ascendientes. La
subclase puede utilizar estos miembros, puede ocultar
las variables miembro o anular (redefinir) los métodos.

 La palabra reservada this, permite hacer referencia a la


propia clase, mientras que super se utiliza para
referenciar a la superclase y poder llamar a métodos de
la misma (aunque estén redefinidos).
Superclases y Subclases
 Regla: Una subclase hereda todos los miembros
de su superclase, que son accesibles a esa subclase
a menos que la subclase oculte explícitamente una
variable miembro o anule un método.

 Los constructores no se heredan por la subclase.


Superclases y Subclases
 Una clase extendida es una clase compuesta con
miembros de la superclase (miembros heredados) y
miembros adicionales definidos en las subclases
(miembros añadidos).

 Los miembros que se heredan por una subclase son:

 Los miembros de las superclases declarados como public


o protected.

 Aquellos miembros declarados sin especificador de


acceso mientras que la subclase está en el mismo paquete
que la superclase.
Superclases y Subclases
 No se hereda un miembro de la superclase si la
subclase declara un miembro con el mismo nombre.
En caso de las variables miembros, la variable miembro
de la subclase oculta (hides) la correspondiente de la
superclase.

 No heredan los miembros privados de la superclase.


Clase Abstracta
 Los métodos y las clases se pueden declarar abstractas
(abstract).

 Una clase abstracta no puede ser instanciada, es decir,


no se puede crear una instancia de una clase abstracta
usando el operador new.

 Tal clase solo se puede utilizar como una clase padre


para crear un nuevo tipo de objeto.

 De modo similar el método abstract debe ser anulado


(redefinido) por una subclase.
Clase Abstracta
 Un modificador alternativo, final, es el opuesto de
abstract.

 Cuando se aplica a una clase, la palabra reservada


indica que la clase no se puede extender, es decir, que
no puede ser una clase padre.

 De modo similar, cuando se aplique a un método,


indica que el método no se puede anular, y por tanto,
el usuario tiene garantizado que el comportamiento de
una clase no puede ser modificado por una clase
posterior.
Clase Abstracta
 Regla:

Modificador Descripción
abstract La clase no puede ser instanciada

final Las clases no pueden ser subclasificadas.

static Los campos static son compartidos por


todas las instancias de una clase.
Clase Abstracta
 Un ejemplo de clase abstracta es la comida en el
mundo real. Se puede tener un ejemplar (una
instancia) de comida?. No, aunque si se pueden tener
instancias de manzanas, chocolates, etc.

 La comida representa el concepto abstracto de cosas


que se pueden comer y no tiene sentido que tenga
instancias ya que no es un objeto concreto.

 La clases abstractas son útiles para definir otras clases


que sirvan para instanciar objetos. El propósito de
una clase abstracta es proporcionar una superclase a
partir de la cual otras clases pueden heredar interfaces
e implementaciones.
Clase Abstracta
 Uno de los objetivos de la POO es reconocer los
elementos que son comunes y agrupar esos elementos
en abstracciones generales. Por ejemplo si se desea
construir un marco de trabajo (framework) de clases
para figuras geométricas, se puede comenzar con la
noción general de “una figura” como clase base. A
partir de la clase base se pueden derivar las clases de
figuras específicas, tales como triángulo o rectángulo.

Figura

Círculo Rectángulo
Clase Abstracta
 Utilice clases abstractas para generalizar propiedades
comunes y métodos de subclases y utilice métodos
abstractos para definir los métodos comunes que
deben ser implementados en subclases.

 Un método abstracto no puede estar contenido en una


clase concreta. En una clase concreta extendida de
una clase abstracta todos los métodos abstractos deben
ser implementados, incluso si no se utilizan en la
subclase.
Interfaces
 Se utilizan para definir un protocolo de
comportamiento que se puede implementar por
cualquier clase en cualquier parte de la jerarquía de
clases. Es un sistema o dispositivo que utiliza
entidades no relacionadas que interactúan. Ejemplos
de interfaces son los controles remotos de los tv pues
sirve de vínculo entre el espectador y el aparato de tv.

 Es una colección con nombres de definiciones de


métodos (sin implementaciones) que puede incluir
también declaraciones de constantes.
Interfaces
 Una interfaz se puede considerar una clase abstracta
totalmente y en ella hay que tener en cuenta que:

 Todos los miembros son públicos (no hay necesidad de


declararlos públicos).
 Todos los métodos son abstractos (se especifica el descriptor
del método y no hay ninguna necesidad de declararlos
abstract).
 Todos los campos son static y final (proporcionan valores
constantes útiles).

 Una declaración de una interfaz consta de dos


componentes: la declaración de la interfaz y el cuerpo
de la misma.
Interfaces
Declaración de Interfaz public interface interfaz_comparar_objetos
{

{
public static final int MENOR = -1;
public static final int IGUAL = 0;

{
Declaración de
Constantes public static final int MAYOR = 1;

Declaración de public int comparar(comparar_objetos v_otro_objeto)


Métodos }

Cuerpo de la Interfaz
Interfaces
 La definición de una interfaz es similar a la definición
de una clase abstracta. Existen, sin embargo, una
pocas diferencias:

 En una interfaz los datos deben ser constantes; una clase


abstracta puede tener todo tipo de datos.
 Cada método de una interfaz tiene una sola una signatura sin
implementación; una clase abstracta puede tener métodos
concretos.
 Ningún modificador abstracto aparece en una interfaz; se
debe poner el modificador abstract antes de un método
abstracto en una clase abstracta.
Interfaces
 Una vez que se ha definido una interfaz, el nombre de
la interfaz se convierte en el nombre de un tipo.
Cualquier clase que implemente la interfaz se
convierte en un subtipo de ella.

 Una interfaz en un contrato entre proveedores y


clientes de un servicio particular.

 El diseño de una interfaz afecta a las funcionalidades


y capacidades en el lado proveedor y las
complejidades y conveniencias en el lado cliente.

También podría gustarte