Java Unidad 10
Java Unidad 10
Utilización avanzada
de clases
Contenidos
En la Programación Orientada a Objetos (POO), las clases no son entidades aisladas; interactúan entre sí para modelar
sistemas reales. Estas interacciones se denominan relaciones entre clases y pueden clasificarse en:
1.1. Asociación
La asociación representa una relación entre dos clases donde una clase utiliza a otra.
3
Parte 1: Relaciones entre clases. Composición de clases
Utilización avanzada de clases
Ejemplo de Asociación
4
Parte 1: Relaciones entre clases. Composición de clases
Utilización avanzada de clases
Salida:
Curso: Matemáticas
Profesor: Juan Pérez
1.2. Composición
La composición es una relación ”tiene un” en la que una clase contiene una o más instancias de otra clase como parte
de su estado interno. Si el objeto “contenedor” se destruye, también lo hacen las partes.
Ejemplo de Composición
5
Parte 1: Relaciones entre clases. Composición de clases
Utilización avanzada de clases
Salida:
Marca: Tesla
Motor: Eléctrico
1.3. Agregación
La agregación también es una relación “tiene un”, pero las partes pueden existir de forma independiente al todo.
Ejemplo de Agregación
6
Parte 1: Relaciones entre clases. Composición de clases
Utilización avanzada de clases
Salida:
2. Ejercicio Guiado
Problema
1. Crea una clase Direccion con los atributos calle, ciudad y código postal.
2. Crea una clase Persona que tenga un atributo nombre y una composición con la clase Direccion.
3. Escribe un método en Persona que muestre la información completa de la persona, incluyendo su dirección.
7
Parte 1: Relaciones entre clases. Composición de clases
Utilización avanzada de clases
3. Preguntas de Evaluación
a) “Es un”.
b) “Tiene un”.
c) “Puede ser”.
d) “Usa un”.
3. ¿Qué palabra clave se utiliza para crear una relación entre clases en Java?
a) class.
b) new.
c) Ninguna, las relaciones se crean mediante atributos.
d) extend.
8
Parte 2: Herencia. Concepto y tipos (simple y múltiple).
Utilización avanzada de clases
1. Concepto de Herencia
1. Definición:
La herencia establece una relación ”es un” entre una clase base (superclase) y una clase derivada (subclase).
2. Palabra Clave:
Ejemplo de Herencia
9
Parte 2: Herencia. Concepto y tipos (simple y múltiple).
Utilización avanzada de clases
Salida:
2. Tipos de Herencia
En la herencia simple, una clase hereda de una sola clase base. Java admite este tipo de herencia de forma nativa.
Salida:
Java no admite herencia múltiple directa para evitar ambigüedades (problema del diamante). Sin embargo, es posible
implementarla de manera indirecta mediante el uso de interfaces.
10
Parte 2: Herencia. Concepto y tipos (simple y múltiple).
Utilización avanzada de clases
interface Volador {
void volar();
}
interface Nadador {
void nadar();
}
public class Pato implements Volador, Nadador {
public void volar() {
[Link](“El pato está volando.”);
}
public void nadar() {
[Link](“El pato está nadando.”);
}
}
public class Main {
public static void main(String[] args) {
Pato miPato = new Pato();
[Link]();
[Link]();
}
}
Salida:
Ventajas Desventajas
Reutilización del Código: Las subclases pueden aprove- Acoplamiento: Cambios en la superclase pueden afectar
char el código de la superclase. a las subclases.
Extensibilidad: Se pueden añadir funcionalidades a través Rigidez: Puede ser difícil modificar jerarquías complejas.
de nuevas subclases.
Facilidad de Mantenimiento: El código común se centrali- Sobrecarga: Una jerarquía muy profunda puede complicar
za en la superclase. la comprensión.
11
Parte 2: Herencia. Concepto y tipos (simple y múltiple).
Utilización avanzada de clases
4. Consideraciones en la Herencia
2. Jerarquías de Herencia:
5. Ejercicio Guiado
Problema
12
Parte 2: Herencia. Concepto y tipos (simple y múltiple).
Utilización avanzada de clases
6. Preguntas de Evaluación
a) extends
b) implements
c) inherits
d) Ninguna de las anteriores
4. ¿Qué tipo de miembros de una superclase no son accesibles directamente en una subclase?
a) public
b) protected
c) private
d) Todos son accesibles.
13
Parte 3: Superclases y subclases.
Utilización avanzada de clases
1. Concepto de Superclase
La superclase (también conocida como clase base o clase padre) es una clase que provee atributos y métodos que
pueden ser heredados por otras clases.
1. Definición:
• Una superclase contiene la funcionalidad común que será compartida con sus subclases.
• Se define como cualquier clase que es heredada por otra clase.
2. Características:
Ejemplo de Superclase
java
Copiar código
public class Animal {
protected String nombre;
public Animal(String nombre) {
[Link] = nombre;
}
public void comer() {
[Link](nombre + “ está comiendo.”);
}
}
2. Concepto de Subclase
La subclase (también conocida como clase derivada o clase hija) es una clase que hereda atributos y métodos de la
superclase.
1. Definición:
14
Parte 3: Superclases y subclases.
Utilización avanzada de clases
2. Características:
Ejemplo de Subclase
La relación entre una superclase y una subclase se describe como una relación ”es un” (is-a relationship).
15
Parte 3: Superclases y subclases.
Utilización avanzada de clases
Salida:
5. Sobrecarga y Sobrescritura
1. Sobrecarga de Métodos:
• Múltiples métodos con el mismo nombre pero diferentes parámetros en la misma clase o subclase.
2. Sobrescritura de Métodos:
16
Parte 3: Superclases y subclases.
Utilización avanzada de clases
Ejemplo de Sobrescritura
Salida:
El perro ladra.
Ventajas Descripción
Reutilización del Código La subclase aprovecha el código de la superclase.
Extensibilidad Es fácil añadir nuevas funcionalidades en subclases.
Centralización de Funcionalidades Comunes Reduce duplicación y facilita el mantenimiento.
17
Parte 3: Superclases y subclases.
Utilización avanzada de clases
7. Ejercicio Guiado
Problema
• marca y velocidadMaxima.
• Método mostrarInformacion() para imprimir los atributos.
• Herede de Vehiculo.
• Añada un atributo tipoCombustible.
• Sobrescriba el método mostrarInformacion() para incluir el tipo de combustible.
18
Parte 3: Superclases y subclases.
Utilización avanzada de clases
8. Preguntas de Evaluación
a) “Tiene un”.
b) “Es un”.
c) “Usa un”.
d) Ninguna de las anteriores.
a) Lanza un error.
b) Se llama al constructor por defecto de la superclase.
c) No se inicializa el objeto.
d) Se ejecuta el método toString().
19
Parte 4: Constructores y herencia.
Utilización avanzada de clases
1. ¿Qué es un Constructor?
Tipos de Constructores
2. Constructor Parametrizado:
2. Constructores en Herencia
20
Parte 4: Constructores y herencia.
Utilización avanzada de clases
2. La palabra clave super se utiliza para invocar explícitamente un constructor específico de la superclase.
Si no se llama explícitamente al constructor de la superclase, Java invoca el constructor por defecto de la superclase.
Ejemplo
Salida:
Constructor de Animal
Constructor de Perro
Si la superclase no tiene un constructor por defecto o deseas invocar un constructor específico, debes usar super.
21
Parte 4: Constructores y herencia.
Utilización avanzada de clases
Ejemplo
Salida:
Especie: Canino
Es un perro.
Cuando tanto la superclase como la subclase tienen constructores parametrizados, se pueden combinar para inicializar
atributos en ambos niveles.
22
Parte 4: Constructores y herencia.
Utilización avanzada de clases
Ejemplo
Salida:
Nombre: Laura
Departamento: Recursos Humanos
• Si no tiene un constructor por defecto, debe llamarse explícitamente uno de sus constructores parametrizados.
23
Parte 4: Constructores y herencia.
Utilización avanzada de clases
3. Constructores no se heredan:
• Aunque los métodos se heredan, los constructores no lo hacen. Las subclases deben definir sus propios cons-
tructores.
1. Inicialización Completa:
Garantiza que tanto los atributos de la superclase como los de la subclase estén correctamente inicializados.
3. Flexibilidad:
5. Ejercicio Guiado
Problema
3. Implementa un método mostrarInformacion() en ambas clases para mostrar los detalles completos del objeto.
24
Parte 4: Constructores y herencia.
Utilización avanzada de clases
6. Preguntas de Evaluación
a) this
b) super
c) extends
d) Ninguna de las anteriores
a) Sí, si es público.
b) No, los constructores no se heredan.
c) Sí, si la subclase no tiene constructores propios.
d) No, excepto si se usa super.
25
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
1. Modificadores de Acceso
En Java, los modificadores de acceso determinan la visibilidad de las clases, atributos y métodos. Existen cuatro nive-
les principales:
1.1. public
• Permite que la clase, atributo o método sea accesible desde cualquier lugar.
• Es el modificador más abierto.
1.2. private
26
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
Salida:
Ana
1.3. protected
• La misma clase.
• Clases dentro del mismo paquete.
• Subclases (incluso si están en un paquete diferente).
27
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
28
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
class Vehiculo {
String marca; // Default
void mostrarMarca() {
[Link](“Marca: “ + marca);
}
}
public class Main {
public static void main(String[] args) {
Vehiculo vehiculo = new Vehiculo();
[Link] = “Toyota”; // Acceso permitido dentro del paquete
[Link]();
}
}
2. Modificadores en Clases
En Java, solo se pueden usar los modificadores public y default (sin modificador) para las clases.
1. Clases public:
Ejemplo
29
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
3. Modificadores en Métodos
Los métodos pueden usar todos los modificadores de acceso (public, protected, private, default). Además, pue-
den tener otros modificadores:
1. static:
2. final:
3. abstract:
4. Modificadores en Atributos
1. final:
• Impide que el valor del atributo sea modificado después de ser inicializado.
2. static:
30
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
5. Ejercicio Guiado
Problema
• Herede de Persona.
• Implemente un método para mostrar toda la información.
3. En la clase principal:
31
Parte 5: Modificadores en clases, atributos y métodos.
Utilización avanzada de clases
6. Preguntas de Evaluación
a) private
b) protected
c) public
d) Sin modificador
a) private
b) protected
c) default
d) public
a) protected
b) default
c) private
d) public
32
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
1. Definición:
• La sobrescritura ocurre cuando una subclase redefine un método de la superclase usando el mismo nombre, tipo
de retorno y parámetros.
• Cambia o extiende el comportamiento del método heredado.
2. Características Clave:
• El método en la subclase debe tener la misma firma (nombre, parámetros y tipo de retorno) que el de la supercla-
se.
• No se puede reducir la visibilidad del método (por ejemplo, de public a protected).
• Debe usar la anotación @Override para indicar explícitamente que está sobrescribiendo un método.
La anotación @Override asegura que el compilador verifique si el método realmente está sobrescribiendo un método
de la superclase.
33
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
Salida:
El perro ladra.
34
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
2. Reglas de Sobrescritura
• La subclase debe mantener el mismo nombre, parámetros y tipo de retorno que el método de la superclase.
2. Visibilidad:
• No se puede reducir la visibilidad del método. Por ejemplo, un método public en la superclase no puede ser
protected o private en la subclase.
4. Excepciones:
• La subclase no puede lanzar excepciones más generales que las declaradas en la superclase.
En la sobrescritura, se puede usar la palabra clave super para llamar al método de la superclase desde la subclase.
35
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
Salida:
5. Ejemplo Completo
• Atributo nombre.
• Método calcularSalario() que devuelve un valor base.
36
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
37
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
Salida:
Empleado: Ana
Salario: 2000.0
Empleado: Carlos
Salario: 600.0
6. Ejercicio Guiado
Problema
38
Parte 6: Sobreescritura de métodos.
Utilización avanzada de clases
7. Preguntas de Evaluación
1. ¿Qué palabra clave se usa para indicar que un método está sobrescribiendo otro?
a) @Override
b) @Overload
c) @Super
d) Ninguna de las anteriores
2. ¿Qué ocurre si un método sobrescrito intenta reducir la visibilidad del método original?
a) final
b) private
c) static
d) Ninguno de los anteriores
39
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
1. Clases Abstractas
1. Definición:
2. Uso Principal:
3. Palabra Clave:
40
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
Salida:
Color: Rojo
Área: 15.0
41
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
1. No Instanciables:
2. Métodos Abstractos:
3. Métodos Concretos:
• Las clases abstractas pueden contener métodos con cuerpo que pueden ser utilizados por las subclases.
2. Métodos Abstractos
1. Definición:
2. Ejemplo:
42
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
3. Clases Finales
1. Definición:
• Se utiliza para evitar que otras clases extiendan una clase específica.
2. Palabra Clave:
3. Ejemplo:
4. Métodos Finales
1. Definición:
Un método final es un método que no puede ser sobrescrito por las subclases.
43
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
2. Ejemplo:
6. Ejemplo Completo
44
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
Salida:
Figura: Triángulo
Área: 7.5
Valor de PI: 3.14159
45
Parte 7: Clases y métodos abstractos y finales
Utilización avanzada de clases
7. Ejercicio Guiado
Problema
8. Preguntas de Evaluación
1. ¿Qué ocurre si una clase contiene un método abstracto y no se declara como abstracta?
2. ¿Qué ocurre si una subclase no implementa todos los métodos abstractos de su superclase abstracta?
a) No se puede heredar.
b) No se puede instanciar directamente.
c) Todos sus métodos deben ser abstractos.
d) Ninguna de las anteriores.
46
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
Una interfaz es una estructura que define un conjunto de métodos que una clase debe implementar. A diferencia de
una clase abstracta, una interfaz no contiene atributos ni métodos concretos (hasta Java 8, con algunas excepciones).
1. Definición:
• Una interfaz actúa como un contrato que las clases que la implementan deben cumplir.
• Los métodos en una interfaz son implícitamente abstractos y públicos (no requieren las palabras clave abstract
o public).
2. Palabra Clave:
47
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
Salida:
1. Múltiples Implementaciones:
• Una clase puede implementar múltiples interfaces, superando la limitación de herencia simple.
• Las interfaces pueden contener métodos concretos con la palabra clave default.
48
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
Interfaz
49
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
Uso Combinado
Ventajas
1. Herencia Múltiple:
2. Desacoplamiento:
3. Compatibilidad:
• Las interfaces pueden ser implementadas por cualquier clase, sin importar su jerarquía.
Limitaciones
2. Comportamiento General:
• Las interfaces no pueden contener lógica común para ser reutilizada directamente (salvo métodos por defecto).
50
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
4. Ejemplo Completo
51
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
52
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
[Link]();
[Link]();
[Link]();
[Link]();
[Link]();
}
}
Salida:
5. Ejercicio Guiado
Problema
53
Parte 8: Interfaces. Clases abstractas vs. Interfaces.
Utilización avanzada de clases
6. Preguntas de Evaluación
a) extends
b) implements
c) interface
d) Ninguna de las anteriores
a) Sí.
b) No.
c) Solo si no tiene métodos abstractos.
d) Ninguna de las anteriores.
54
Conclusión del Bloque: Utilización avanzada de clases
Utilización avanzada de clases
2. Herencia y Jerarquías
• Los modificadores de acceso (public, private, protected, default) controlan la visibilidad y el acceso al código.
• Los modificadores como final y static agregan restricciones y propiedades especiales a los métodos y atributos.
4. Sobrescritura y Sobrecarga
• Las clases abstractas proporcionan una estructura base para las subclases, definiendo métodos abstractos y con-
cretos.
• Los métodos finales y las clases finales restringen la modificación y la herencia, respectivamente.
6. Interfaces
• Las interfaces definen un contrato de comportamiento que las clases deben implementar.
• Java permite combinar múltiples interfaces, facilitando la herencia múltiple.
• Desde Java 8, las interfaces pueden incluir métodos por defecto y estáticos.
55
Conclusión del Bloque: Utilización avanzada de clases
Utilización avanzada de clases
1. Modularidad:
2. Flexibilidad y Reutilización:
3. Encapsulación:
• Los modificadores de acceso controlan cómo y dónde se puede interactuar con las clases y sus miembros.
4. Extensibilidad:
• Las jerarquías de clases bien diseñadas permiten extender funcionalidades de manera eficiente.
5. Consistencia:
• Los contratos definidos por interfaces garantizan que las implementaciones cumplan con las especificaciones
establecidas.
Problema
Diseña un sistema para gestionar un zoológico utilizando los conceptos del bloque:
4. En la clase principal:
56
Conclusión del Bloque: Utilización avanzada de clases
Utilización avanzada de clases
Código Propuesto
import [Link];
public abstract class Animal {
protected String nombre;
protected int edad;
public Animal(String nombre, int edad) {
[Link] = nombre;
[Link] = edad;
}
public abstract void hacerSonido();
public void mostrarInformacion() {
[Link](“Nombre: “ + nombre + “, Edad: “ + edad);
}
}
public interface Domestico {
void jugar();
}
public class Perro extends Animal implements Domestico {
public Perro(String nombre, int edad) {
super(nombre, edad);
}
@Override
public void hacerSonido() {
[Link](“El perro ladra.”);
}
@Override
public void jugar() {
[Link](nombre + “ está jugando con una pelota.”);
}
}
public class Gato extends Animal implements Domestico {
public Gato(String nombre, int edad) {
super(nombre, edad);
}
@Override
public void hacerSonido() {
[Link](“El gato maúlla.”);
}
@Override
public void jugar() {
[Link](nombre + “ está jugando con un ovillo de lana.”);
}
57
Conclusión del Bloque: Utilización avanzada de clases
Utilización avanzada de clases
}
public class Main {
public static void main(String[] args) {
ArrayList<Animal> animales = new ArrayList<>();
[Link](new Perro(“Rex”, 5));
[Link](new Gato(“Luna”, 3));
for (Animal animal : animales) {
[Link]();
[Link]();
if (animal instanceof Domestico) {
((Domestico) animal).jugar();
}
[Link](“---”);
}
}
}
Salida:
58
Conclusión del Bloque: Utilización avanzada de clases
Utilización avanzada de clases
4. Preguntas de Evaluación
a) extends
b) implements
c) interface
d) Ninguna de las anteriores
59