Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Ud 04

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 64

4

ANÁLISIS Y PROGRAMACIÓN EN JAVA

Programación orientada
a objetos con Java
ÍNDICE
4 4.1 4.2 4.3

La programación Herencia y Clases anidadas,


orientada a objetos. sobreescritura de locales y
Constructores y métodos. Clases anónimas. Diseño
sobrecarga de abstractas e orientado a
métodos interfaces objetos
4.1 La programación
orientada a
objetos.
Constructores y
sobrecarga de
métodos
C O M E N Z A R
La programación orientada a objetos. Constructores y sobrecarga de métodos

POO, la orientación a objetos


PA R A D I G M A D E P R O G R A M A C I Ó N

Constituye una filosofía de diseño y desarrollo de software de gran trascendencia para la


producción de software eficiente y barato. Permite, además, una representación más directa
del modelo del mundo real.
Actualmente, en Ingeniería informática se tiende a producir objetos reutilizables para ensamblarlos a
otros con el fin de obtener el producto final completo. Estos elementos reutilizables son lo que
conocemos como “OIS” (Objetos Integrados de Software).
La Programación orientada a Objetos (POO) permite crear unidades funcionales extensibles y
genéricas, de manera que el usuario las va a poder utilizar adaptadas a sus necesidades y, siempre,
bajo las especificaciones del problema a desarrollar.
La programación orientada a objetos. Constructores y sobrecarga de métodos

La sobrecarga de métodos
Es la creación de Mismo nombre Java utiliza el número y
varios métodos con: tipo de parámetros para
Diferente lista de tipos de parámetros
seleccionar qué definición
de método ejecutar.
La programación orientada a objetos. Constructores y sobrecarga de métodos

El método getAtributos() se puede sobrecargar para devolver los atributos de


un vehículo y para mostrar la tarifa reducida al aplicar el porcentaje de descuento
recibido. Podemos ver cómo se diferencian los dos métodos por la declaración de
sus parámetros y ambos métodos realizan operaciones distintas.
Ejemplo
public String getAtributos() {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}
public String getAtributos(double porcentajeDescuento) {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() + " Tarifa: " +
(100.0 – porcentajeDescuento)/100*tarifa +
" Disponible: " + getDisponible;
}
La programación orientada a objetos. Constructores y sobrecarga de métodos

El constructor
ES UN MÉTODO QUE SE INVOCA CUANDO SE CREA UNA
NUEVA INSTANCIA DE UNA CLASE POR MEDIO DE NEW.

En el constructor se especifican las acciones que hay que realizar antes


de utilizar el objeto, como la inicialización de sus atributos, que podemos
realizar en la declaración, aunque lo aconsejable es hacerlo dentro del
constructor.

Si lo que queremos es utilizar datos de fuera de la clase para inicializar


los atributos de un objeto, hay que definir un constructor con parámetros
que se utilizan para pasar los datos necesarios en la llamada a new.

La sintaxis de un constructor es similar a la de un método pero en este


caso, no se declara tipo de retorno, no se utiliza sentencia return y
su nombre coincide con el de la clase.
4.2 Herencia y
sobreescritura de
métodos. Clases
abstractas e
interfaces

C O M E N Z A R
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

La herencia
ES UNA TÉCNICA QUE PERMITE QUE UNA CLASE HEREDE
LOS ATRIBUTOS Y MÉTODOS DE OTRA CLASE, LO QUE
GARANTIZA LA REUTILIZACIÓN DEL CÓDIGO.

Permite a los diseñadores que, a partir de una


jerarquía de clases ya existente, puedan construir
nuevas clases y evitar rediseñar, recodificar y
verificar la parte ya implementada.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

CON LA HERENCIA

Las clases están clasificadas en una jerarquía estricta


CADA CLASE TIENE:
Clase CEmpleado
• Su superclase, la clase superior
en la jerarquía (clase base).

• Una o varias subclases, que


son las clases inferiores en la Clase CEmpleado
Clase CEmpleado Auxiliar
jerarquía (clases derivadas). administrativo

Las clases de la parte inferior heredan de las que están en la parte superior, y de
este modo van a disponer de todos los métodos y propiedades de su superclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

En Java
cada clase sólo puede tener una superclase.

HERENCIA SIMPLE

La clase Object es la clase raíz de la jerarquía


de clases de la biblioteca de Java, y por tanto
cualquier clase que implementemos será
automáticamente una subclase de esta clase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Aspectos fundamentales
DE LA HERENCIA

Carácter estructural
• Las subclases heredan las estructuras de sus clases base.
• Ejemplo: El empleado administrativo y el auxiliar
heredan de la clase empleado todas sus características
estructurales (nombre, dirección, DNI, edad…)
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Aspectos fundamentales
DE LA HERENCIA

Carácter estructural
Características de comportamiento
Ejemplo: Siguiendo nuestro ejemplo, si la clase Empleado
tiene el método “EscribirDatosPersonales” (nombre,
dirección, DNI, edad…), sus clases derivadas heredan este
mismo método.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Aspectos fundamentales
DE LA HERENCIA

Carácter estructural
Características de comportamiento
Especialización
• La herencia se contempla como una especialización
desde el punto de vista del tipo. Según esto, puede ser
que alguno de los métodos que se definen en la
superclase tengan que cambiarse para reflejar las
nuevas características de la superclase.
• Ejemplo: En la clase Empleado, uno de los métodos
como puede ser “CalcularSalario” va a tener
diferente implementación según la clase (empleado
administrativo o auxiliar)
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Aspectos fundamentales
DE LA HERENCIA

Carácter estructural
Características de comportamiento
Especialización
Extensión
• Los objetos derivados de la clase base tienen más atributos
y servicios, por eso la herencia se puede contemplar como
una extensión de la lase base.
• Ejemplo: La clase “empleado administrativo” puede tener
todos los atributos y métodos de la clase “empleado” y,
además, incluir otros atributos y métodos, como métodos
que calculen temas de contabilidad, que no están
contemplados en la clase Empleado.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Aspectos fundamentales
DE LA HERENCIA

Carácter estructural
Características de comportamiento
Especialización
Extensión
Generalización
Es el proceso inverso a la especialización. Consiste en
identificar todos los atributos iguales de un conjunto de
subclases para formar una clase base con dichos
atributos semejantes.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

La ocultación de información
SE REFIERE A LA OCULTACIÓN DE DECISIONES DE DISEÑO EN UN
PROGRAMA PARA PROTEGER OTRAS PARTES DEL CÓDIGO EN EL
CASO DE QUE SE PRODUZCAN CAMBIOS.

El diseñador elige qué variables de instancia y métodos


de los objetos de una clase son visibles.

En POO la ocultación de información se define en la clase ,


que tiene dos tipos de usuarios, las instancias y las subclases.
Únicamente serán visibles las variables y los métodos de un
objeto que se definan como públicos.

El diseñador define qué miembros de las superclases son


visibles en las subclases.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Especificaciones
CON LAS QUE SE CONSIGUE LA OCULTACIÓN DE INFORMACIÓN

1 Private. Ningún miembro privado de la superclase es visible en la subclase.

Protected. Los miembros protegidos de la superclase son visibles en la subclase,


2
pero no visibles para el exterior.

3 Public. Los miembros públicos de la superclase siguen siendo públicos en la subclase.


Herencia y sobreescritura de métodos. Clases abstractas e interfaces

class empleado {
DEFINICIONES DE CLASE // variables privadas (visibilidad por defecto)
CON LOS DISTINTOS char * nombre;
ESPECIFICADORES DE ACCESO char * DNI;
int edad;
Ejemplo float peso, altura;
protected:
// variables protegidas
char *direccion;
... ...
public:
// variables publicas
empleado(char *,char *, int, float, float, char *);
cambio_dirección(char *);
... ...};
class empleadoadministratvo : private empleado {
// variables privadas (visibilidad por defecto)
int dpto;
char * tipo_trabajo;
int salario;
char *tipo_formación;
... ...
public:
empleadoadministrativo(int, char *, int, char *);
cambio_dpto(int);
calculo_salario(int);
... ...};
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

DEFINICIONES DE CLASE
CON LOS DISTINTOS
ESPECIFICADORES DE ACCESO
Ejemplo

Las variables de instancia: nombre, DNI, edad, peso y altura


de la clase "empleado" no son visibles en la clase
"empleadoadministrativo", por lo tanto no se pueden utilizar
desde esta clase.

Mientras que la variable de instancia dirección y los


métodos empleado, cambio de dirección, etc. son visibles
desde la subclase "empleaoadministrativo" y por lo tanto se
pueden utilizar en esta subclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Herencia y tipado
SE PUEDEN CONFUNDIR A VECES, PERO SON DISTINTOS.

La herencia hace referencia a implementaciones.

El tipado es una relación semántica entre tipos de objetos.

EJEMPLO:
Siguiendo nuestro ejemplo, el “Empleado Administrativo”
es un subtipo de “Empleado” y puede realizar operaciones
definidas para la clase “Empleado”.

En la herencia las subclases se contemplan como subtipos de sus


clases base, no obstante, la herencia es más restrictiva que el subtipo,
ya que éste se puede contemplar como una jerarquía de
comportamientos.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

La relación entre Conceptos


herencia y subtipado
ES SIMILAR A LA QUE HAY ENTRE UN TIPO TA D Subtipo
DE DATO ABSTRACTO (TAD) Y CLASE

Una clase es la implementación de un TAD y la


herencia es la implementación del subtipado.

Clase Herencia

Implementación
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

La herencia
se puede utilizar de dos formas:
1 Como una implementación del subtipado

Como una forma de reutilizar el código para


2 ahorrar esfuerzos a la hora de programar.

EJEMPLO:
La herencia entre "Empleado"y "EmpleadoAdministrativo" es un reflejo del subtipado,
y la herencia entre "Elipse" y "Circulo" es una forma de compartir código común a
las dos clases porque el círculo no es formalmente un tipo de elipse.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Recuerda que…

La herencia
ES UNA TÉCNICA QUE PERMITE QUE UNA CLASE HEREDE
LOS ATRIBUTOS Y MÉTODOS DE OTRA CLASE, LO QUE
GARANTIZA LA REUTILIZACIÓN DEL CÓDIGO.

Permite a los diseñadores que, a partir de una


jerarquía de clases ya existente, puedan construir
nuevas clases y evitar rediseñar, recodificar y
verificar la parte ya implementada.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Recuerda que…

Las clases están clasificadas en una jerarquía estricta


CADA CLASE TIENE:
Clase CEmpleado
• Su superclase, la clase superior
en la jerarquía (clase base).

• Una o varias subclases, que


son las clases inferiores en la Clase CEmpleado
Clase CEmpleado Auxiliar
jerarquía (clases derivadas). administrativo

Las clases de la parte inferior heredan de las que están en la parte superior, y de
este modo van a disponer de todos los métodos y propiedades de su superclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Recuerda que…

En Java
cada clase sólo puede tener una superclase.

HERENCIA SIMPLE

No existe la herencia múltiple.


Herencia y sobreescritura de métodos. Clases abstractas e interfaces

LA HERENCIA

Es una herramienta muy potente


QUE PERMITE REUTILIZAR CLASES PARA CREAR OTRAS MÁS ESPECÍFICAS.

Sirve incluso para definir unos términos que tiene que cumplir una clase
para utilizarse en un momento determinado.

TIPOS:

1 Herencia de implementación

2 Herencia de interfaz
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

HERENCIA

De implementación
ES LA MÁS SENCILLA.

Se crea una jerarquía de clases donde una clase hija


(o subclase) hereda los atributos y métodos de su
clase padre (o superclase).

De este modo un objeto de la clase hija se puede


utilizar en cualquier lugar donde se utilice la clase
padre porque, a todos los efectos, es instancia de la
clase padre, pero no al contrario, es decir, un objeto
de una clase no se considera instancia de ninguna de
las clases que hereden de ella.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

En una jerarquía de la clase Empleado podemos crear diversas clases más


específicas que ofrezcan atributos o métodos particulares a ciertos tipos de
empleados. Por ejemplo, los directivos pueden tener una clase propia porque
tienen asociada una plaza de aparcamiento, o a los licenciados porque el
Ejemplo
mecanismo para incrementar su sueldo varía.

Empleado
#nombre
#sueldo

+subirSueldo()

Directivo Ingeniero Seguridad


-despacho -incentivo -turno
… … …
+subirSueldo() +asignarTurno()
… …
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

COMO JAVA NO PERMITE

La herencia de implementación múltiple


UNA CLASE SOLO PUEDE HEREDAR DE OTRA DE FORMA DIRECTA.

Cuando se accede a uno de los atributos de un objeto, o se


invoca un método, en primer lugar se busca en la clase a la que
pertenece, si ahí no se encuentra se recorre la cadena de clases
antecesoras hasta que se encuentre.

En Java todas las clases heredan de una clase que se encuentra


en el paquete java.lang , es la clase Object.
En ella, se encuentran implementados diversos métodos como
equals(), clone(), o el método toString() que permite
obtener una representación textual del objeto invocado.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Declaración de herencia entre clases


PARA EXTENDER UNA CLASE EN JAVA SE UTILIZA LA PALABRA RESERVADA extends.

Esta palabra se sitúa después del package gestion.empleados;


nombre de la clase que se public class Directivo extends Empleado{
declara (subclase o clase hija), y
int despacho;
a continuación se sitúa el nombre
de la clase de la que hereda ...
(superclase o clase padre). }

Este tipo de herencia permite


que la clase hija se especialice y
puede definir atributos nuevos,
crear métodos nuevos o modificar
el comportamientos de los que
hereda de la clase padre.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Para declarar
nuevos atributos o métodos
SE SUMARÁN A LOS ATRIBUTOS QUE HEREDE DE LA
SUPERCLASE, PERO ÉSTOS NO SON ACCESIBLES A
LAS INSTANCIAS DE LA CLASE PADRE, ÚNICAMENTE
LA CLASE HIJA DISPONE DE ELLOS.

Para que una instancia de la clase hija actúe


como objeto de su clase padre utilizando los
atributos o métodos específicos de su clase
hija hay que realizar un casting.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

HERENCIA

De interfaz
LAS CLASES SUPERIORES NO SON ESPECIALIZADAS POR OTRAS, SINO QUE
DECLARAN UN COMPORTAMIENTO QUE SE DEFINE EN LAS CLASES INFERIORES
DE LA JERARQUÍA, OFRECIENDO SU PROPIA DEFINICIÓN DEL MISMO.

Una clase puede implementar tantas interfaces sean


necesarias, es la forma que existe en Java de
resolver la herencia múltiple.

Así, podemos crear patrones de comportamiento


que pueden interactuar sin tener conocimiento del
código.

I N T E R FAC E S

Formas de aplicación:
C L A S E S A B ST R AC TA S
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

SUPERCLASE SUBCLASE
Una clase que se hereda La clase que hereda

Es una versión
especializada de una
superclase, hereda todas
las variables y métodos
definidos por la superclase
y agrega sus propios
elementos únicos.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

EN UNA JERARQUÍA

Es posible
QUE TANTO LAS SUPERCLASES COMO LAS SUBCLASES
TENGAN SUS PROPIOS CONSTRUCTORES.

La superclase no tiene conocimiento ni acceso a


ningún elemento en una subclase, así que su
construcción debe estar separada.

Los constructores no se heredan, por lo que las


subclases deben definir su propio constructor.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

La subclase
NECESITA QUE SE EJECUTE EL CONSTRUCTOR DE LA
SUPERCLASE ANTES QUE SU PROPIO CONSTRUCTOR PARA
INICIALIZAR LAS VARIABLES DE INSTANCIA HEREDADAS.

Utilizamos la palabra reservada super


seguida entre paréntesis de los
parámetros correspondiente en el
cuerpo del constructor de la subclase:

super(argumentos opcionales);
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

L A PA L A B R A R E S E RVA D A

Super
PERMITE DIRECCIONAR LA CLASE
PADRE PARA ACCEDER EXPRESAMENTE
A SUS ATRIBUTOS O MÉTODOS.

Si los métodos o atributos de una clase


padre a los que queremos acceder al
implementar una clase hija, se han
ocultado o sobrescrito no podemos
acceder a ellos directamente. Para
esto Java tiene definida esta palabra.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Referenciar atributos ocultos porque la clase

La utilidad
DE LA PALABRA super
derivada ha declarado atributos con el mismo
nombre. Utilizamos la expresión:
super.nombre

Invocar métodos sobrescritos. Se invoca de


forma similar a los atributos, precediendo el
método y los argumentos de la palabra: super

Invocar al constructor de la clase padre en el


constructor de alguna de sus clases derivadas.
Invocamos el método super() con los
argumentos que queremos pasar al constructor.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Inicializar los atributos de la superclase


PARA ELLO SE LLAMA A SU CONSTRUCTOR DESDE EL DE LA SUBCLASE.

Ejemplo

/** constructor de una subclase */


public Subclase(parámetros...) {
// invoca el constructor de la superclase
super(parámetros para la superclase);
// inicializa sus atributos
...
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Tiene que ser la llamada a super


LA PRIMERA INSTRUCCIÓN DEL CONSTRUCTOR DE LA SUBCLASE

Si desde un constructor de una subclase no se llama expresamente al de la


superclase el compilador añade la llamada al constructor sin parámetros:

public Subclase(int i){ public Subclase(int i){


this.i=i; super();
SE CONVIERTE EN:
} this.i=i;
}

Si la superclase no tiene un constructor sin parámetros se produciría un


error de compilación.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Fases de la creación
D E U N A N U E VA I N S TA N C I A M E D I A N T E U N C O N S T R U C TO R :

1 2 3
Llamada al
Asignación Ejucución del
constructor
de valores a resto del
de la clase
los atributos. constructor.
ascendente.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Ocultación de atributos
PROCESO MEDIANTE EL CUAL SE DECLARAN
ATRIBUTOS CON EL MISMO NOMBRE QUE OTROS
DE LA CLASE PADRE.

Se puede utilizar la palabra reservada super para


acceder a los atributos que han quedado ocultos.

Sobrescribir un método heredado :


• Creamos en la clase hija un método con la misma signatura que el que queremos sobrescribir
(nombre, tipo de retorno y tipo y número de los parámetros),

• Para indicar qué método sobrescribe al otro utilizaremos la anotación @Override justo antes del
método.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

package gestion.empleados;
public class Ingeniero extends Empleado{
private int incentivos;
public Ingeniero(String nombre){
Ejemplo super(nombre);
}
public Ingeniero(String nombre, int añosTrabajando, int
sueldo) {
super(nombre, añosTrabajando, sueldo);
}
@Override
public void subirSueldo(int cantidad){
sueldo += cantidad;
incentivos += cantidad/10; // 10% extra en incentivos
}
@Override
public int getSueldo() {
return sueldo + incentivos;
}
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

El método de la
clase específica
ES EL QUE ATIENDE SIEMPRE LA
LLAMADA DEL MÉTODO OCULTADO.

De esta forma aseguramos que se


utiliza el comportamiento adecuado,
incluso si el objeto de la subclase
está declarado como una instancia
de la superclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Se invoca al método subirSueldo() de una colección de objetos de la clase Empleado.


Sin embargo, en el primero de ellos el código que se ejecuta es el método sobrescrito.

Ejemplo Ingeniero d1 = new Ingeniero("Carlos",2,30000);


Empleado e1 = new Empleado ("Luis",5,24000);
Directivo i1 = new Directivo ("Pedro",1,28000);
Empleado [] empleados = new Empleado[3];
empleados[0] = d1;
empleados[1] = e1;
empleados[2] = i1;
Según esto, Carlos ha
... incrementado su sueldo
for (int i=0; i<empleados.length; i++){ en 1.000 más el 10 por
empleados[i].subirSueldo(1000); 100, siendo el del resto
sólo en 1.000 unidades:
}
for (int i=0; i<empleados.length; i++){
SUELDOS
System.out.println (empleados[i].getNombre() + Carlos: 31100
": Sueldo: " + empleados[i].getSueldo()); Luis: 25000
Pedro: 29000
}c
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Siempre se invoca el
método de la subclase

S O B R E E S C R I T U R A
Cambiar la implementación de
un método estático O C U LTA C I Ó N

Al igual que en la sobreescritura, se crea un método La versión del método que


con la misma signatura, aunque en este caso el invocamos dependerá de si
se invoca desde la
método tiene que ser un método de clase.
subclase o la superclase.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

class ClasePadre{
public static void pruebaMetodoEstatico(){
System.out.println("LLamada a método estático "+ "de la clase padre");
}
Ejemplo }
class ClaseHija extends ClasePadre{
public static void pruebaMetodoEstatico(){
System.out.println("LLamada a método estático " + "de la clase hija");
}
}
public class PruebaHerencia {
public static void main(String[] args) {
ClasePadre.pruebaMetodoEstatico();
ClaseHija.pruebaMetodoEstatico();
}
}

El resultado de la invocación es:


LLamada a método estático de la clase padre
LLamada a método estático de la clase hija
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

El polimorfismo
HACE REFERENCIA A QUE EL MISMO COMPONENTE DEL LENGUAJE PUEDE
ASUMIR DIFERENTES TIPOS O MANIPULAR TIPOS DIFERENTES DE OBJETOS.

Aplicado a la POO implica que un


mismo método puede tener diferentes
comportamientos o implementaciones
que se diferencian por el número y tipo
de sus argumentos. Se conoce como
sobrecarga de un método.

Los ejemplos de los apartados anteriores


sirven para ejemplificar y ponen de
manifiesto el polimorfismo en Java.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

abstract
LOS MÉTODOS ABSTRACTOS NO CONTIENEN
IMPLEMENTACIÓN, SE DECLARA LA SIGNATURA
DEL MÉTODO TERMINADA EN PUNTO Y COMA.

Estos métodos se definen para que sean


implementados por una clase derivada.

Si una clase contiene un método abstracto


debe ser declarada como abstract.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Clases y métodos finales


SI DECLARAMOS UN MÉTODO DE UNA CLASE COMO FINAL, IMPLICA QUE ESE
MÉTODO NO SE VA A PODER SOBREESCRIBIR POR UNA SUBCLASE.

Impedir la sobreescritura de un método puede ser útil


en métodos que son importantes porque deben
mantener la consistencia del estado de los objetos.

También se puede declarar como final una clase


entera por motivos de seguridad. En este caso todos
los métodos de la clase se consideran también finales.

El modificador final utilizado sobre atributos tiene


diferente significado, indica que la variable en
cuestión no se puede modificar una vez establecida.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Herencia forzada
LA OBLIGACIÓN DE ESCRIBIR UNA NUEVA
CLASE QUE HEREDE DE OTRA CUANDO SE
QUIERA USAR ESTA ÚLTIMA.

Se utiliza el modificador abstract delante


de la definición de la clase.

Ejemplo

public abstract class NombreDeClase { ... }


Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Herencia de interfaz
LAS CLASES SUPERIORES NO SON ESPECIALIZADAS POR OTRAS, SINO QUE
DECLARAN UN COMPORTAMIENTO QUE SE DEFINE EN LAS CLASES INFERIORES
DE LA JERARQUÍA, OFRECIENDO SU PROPIA DEFINICIÓN DEL MISMO.

Así, podemos crear patrones de comportamiento que


pueden interactuar sin tener conocimiento del código.

Formas de aplicación:

1 Interfaces

2 Clases abstractas
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Interfaz
ES SIMILAR A UNA CLASE PERO CON ALGUNAS PARTICULARIDADES:

Sólo puede tener declaraciones de métodos, pero no


su implementación.

Puede tener constantes, no variables como atributos y


no puede ser instanciada, sólo implementada por clases
o extendida por otras interfaces.

Al igual que las clases, se pueden utilizar como tipos


de datos para variables y argumentos que albergarán
objetos de clases que implementen la interfaz.
Independientemente de su clase, se sabe que cumplen
la interfaz por lo que se puede invocar a sus métodos.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Definición
DE UNA INTERFAZ

[modificador_acceso] interface NombreInterfaz [extends Interfaz1]


{
<constantes>
<signaturas de métodos>
}

Ejemplo

public interface Reproductor {


La interfaz Reproductor tiene
dos métodos, uno que inicia public void reproducir();
la reproducción de un objeto
multimedia, y otro para public void parar();
detener la reproducción.
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Para utilizarlas
DEBEMOS DECLARAR CLASES QUE LAS IMPLEMENTEN

Utilizamos:

La palabra implements en la cabecera de la clase.

class NombreClase implements [Interfaz1, [InterfazN]]


{
...
<implementación de métodos de la interfaz>
...
}

Si una clase implementa una interfaz debe definir todos


los métodos de la misma y respetar su signatura.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Las instancias de esas clases


OFRECEN EL COMPORTAMIENTO DE ESA CLASE Y SUS ANTECESORAS,
ASÍ COMO EL DE LAS INTERFACES QUE IMPLEMENTE.

Ejemplo
public class ReproductorAudio implements Reproductor{
String cancion;
public String getNombreCancion(){
return this.cancion;
}
...
public void reproducir() {
...
} En este ejemplo vemos que en el caso de la
public void parar() { interfaz Reproductor podemos tener un
... reproductor de archivos de audio representado
} por la clase ReproductorAudio, que tiene que
...
implementar los métodos de la interfaz
Reproductor.
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Clases abstractas
SÍ QUE DEFINEN MÉTODOS Y PUEDEN CONTENER ATRIBUTOS.

Permiten reutilizar o compartir este comportamiento


entre sus subclases.
Estas clases tampoco pueden tener instancias.

Creación:

Utilizamos el modificador abstract, que pondremos delante de la clase. Si la clase tiene un


método declarado abstracto, debe ser abstracta pero no todos sus métodos tienen que ser
abstractos, de hecho puede que ninguno lo sea.
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

Ejemplo Podemos ver una clase abstracta que representa una fuente de datos. La
clase FuenteDeDatos no puede tener instancias, pero cuando se vaya a
utilizar esta clase vemos que se dispone de los métodos leerDato() y
hayDato(), y getDatosLeidos() que implementa.

public abstract class FuenteDeDatos {


public int datosLeidos;
public int getDatosLeidos(){
return datosLeidos;
}
public abstract byte leerDato();
public abstract boolean hayDato();
}
Herencia y sobreescritura de métodos. Clases abstractas e interfaces

C L A S E A B S T R A C TA

Utilización:

Crear una subclase que ofrezca la


implementación de todos los métodos
abstractos. public class LectorDeRed extends FuenteDeDatos{
@Override
Si no queremos implementar todos, los
public byte leerDato() {
podemos declarar también como
abstractos, extendiendo una clase ...
abstracta con otra clase abstracta. }
@Override
Podemos utilizar la anotación @Override public boolean hayDato() {
al sobrescribir los métodos abstractos, y
...
así nos aseguramos que el compilador
compruebe que existen esos métodos en }
la superclase, aunque sean abstractos. }
4.3 Clases anidadas,
locales y anónimas.
Diseño orientado a
objetos

C O M E N Z A R
Clases anidadas, locales y anónimas. Diseño orientado a objetos

Clases internas
Como hemos visto anteriormente las clases internas son
clases anidadas dentro de otras clases o métodos. Son
recursos esenciales en el manejo de interfaces gráficas
en Java.

Una clase interna tiene acceso a todas las variables y


métodos de su clase externa y puede referirse a ellos
directamente de la misma manera que lo hacen otros
miembros no estáticos de la clase externa.
Clases anidadas, locales y anónimas. Diseño orientado a objetos

Tipos de clases internas


Hay básicamente cuatro tipos de clases internas en Java.

1 Clase interna anidada.

2 Método Clases internas locales.

3 Clases anidadas estáticas.

4 Clases internas anónimas.

Vam os a
recordarlo
TIEMPO ESTIMADO DE LECTURA
10 min

https://drive.google.com/file/d/1725YKeWujG4TQyTmRHHWEZDOA9PiGMoG/preview
hemos
terminado
¡EXCELENTE TRABAJO!

También podría gustarte