Contenido del curso
Pensando en objetos
Construcción de clases y modelado de objetos
- 10

Métodos estáticos para clases utilitarias en Java
08:43 min - 11

Constantes en Java: inmutabilidad con static final
04:08 min - 12

Constructores en Java para objetos con datos
08:10 min - 13

Gestión de memoria en Java: stack, heap y garbage collector
07:04 min - 14

Encapsulamiento en Java: Atributos privados y métodos getter y setter
09:26 min - 15

Listas en Java: agregar, recorrer y eliminar
11:12 min - 16

Asociación, agregación y composición en Java
03:45 min - 17

Menú interactivo en Java con switch
11:37 min - 18

Buscar y eliminar películas en Java
09:20 min
Estructuras de datos y Java moderno
- 19

Streams y lambdas para filtrar listas en Java
11:55 min - 20

Ordenar y transformar listas con streams en Java
11:49 min - 21

Validación de entrada con enums en Java
11:56 min - 22

Excepciones personalizadas en Java
08:16 min - 23

Records para simplificar código inmutable en Java
06:59 min - 24

Mapas en Java para contar visualizaciones de películas
09:47 min - 25

Leer archivos planos con Java nio
13:48 min - 26

Escribir en archivos planos con Files.writeString
09:50 min
Reutilización y diseño orientado a objetos
Clases abstractas y métodos en Java
Resumen
Cuando piensas en el contenido de una plataforma de streaming, te imaginas una película, una serie o un evento en vivo. El contenido, en sí mismo, es una idea general que necesita especialización. Esa misma lógica aplica en programación orientada a objetos: las clases abstractas en Java te permiten definir estructuras comunes que las clases hijas deben especializar, evitando instanciar conceptos genéricos que no representan algo concreto.
¿Qué es una clase abstracta en Java y por qué usarla?
Una clase abstracta es aquella que no puede instanciarse directamente porque representa un concepto genérico que necesita ser especializado por sus subclases. En el ejemplo de la plataforma, Contenido es abstracto porque no existe un contenido genérico: existen películas, documentales, series.
Antes de declararla como abstracta, podías hacer new Contenido() pasándole título, duración y género. Eso era incorrecto, porque permitía crear algo que conceptualmente no debería existir como entidad concreta.
Para corregirlo, se agrega la palabra reservada abstract antes de class:
java public abstract class Contenido { // atributos y métodos comunes }
Con esto, Java bloquea la instanciación de Contenido y obliga a trabajar siempre con sus tipos específicos, como Pelicula o Documental [01:30].
¿Puedo instanciar una clase abstracta en Java? No. Una clase marcada con
abstractno se puede crear connew. Solo puedes instanciar sus subclases concretas, que sí representan tipos específicos.
¿Cómo funciona un método abstracto y la sobreescritura?
Hasta ese punto, todas las subclases compartían el método reproducir heredado del padre, que mostraba el mismo mensaje genérico. Pero un documental no se reproduce igual que una película, y ahí entra el método abstracto.
Un método abstracto se declara sin cuerpo, solo con punto y coma al final, y obliga a las subclases a implementarlo:
java public abstract void reproducir();
Dos reglas clave aparecen aquí:
- Si una clase tiene al menos un método abstracto, la clase entera debe declararse
abstract. - Cada subclase concreta está obligada a implementar ese método o también volverse abstracta.
Cuando la subclase implementa el método del padre, se usa la anotación @Override, que indica explícitamente que estás sobreescribiendo un comportamiento heredado [03:30].
¿Cómo se sobreescribe un método en cada subclase?
En Pelicula, el método se implementa así:
java @Override public void reproducir() { System.out.println("Reproduciendo la película " + getTitulo()); }
En Documental, el mensaje cambia para incluir al narrador:
java @Override public void reproducir() { System.out.println("Reproduciendo el documental narrado por " + narrador); }
Al ejecutar la opción 6 del programa con el contenido Titanic, la salida es "Reproduciendo la película Titanic". Con Oasis, en cambio, aparece "Reproduciendo el documental Oasis, narrado por Alejandro Ramírez" [04:30]. Mismo mensaje, distinto comportamiento.
¿Qué relación tienen las clases abstractas con el polimorfismo?
En el main, la plataforma busca un contenido y lo trata como Contenido, sin importar si por debajo es película o documental. Cuando se invoca contenido.reproducir(), Java detecta que el método es abstracto en la clase padre y baja a buscar la implementación específica de cada subclase.
Esto es polimorfismo en acción: un mismo mensaje (reproducir) es interpretado de manera distinta según el tipo real del objeto. La plataforma habla en lenguaje genérico, pero cada subclase responde con su propia voz.
¿Cuál es la diferencia entre una clase abstracta y una clase normal? Una clase normal puede instanciarse con
newy todos sus métodos tienen cuerpo. Una clase abstracta no se puede instanciar y puede tener métodos abstractos que las subclases deben implementar obligatoriamente.
Cuándo conviene usar una clase abstracta
Las clases abstractas son ideales cuando quieres compartir estructura y comportamiento común entre varias clases, pero también necesitas forzar que cada subclase implemente su propia versión de ciertos métodos. Te dan lo mejor de dos mundos:
- Reutilización del código común en el padre.
- Especialización obligatoria en cada hijo.
- Un punto único para tratar objetos diferentes de manera uniforme.
Como reto, intenta sobreescribir el método obtenerFichaTecnica para mostrar datos adicionales según el tipo de contenido. ¿Qué incluirías para una película y qué cambiarías para un documental? Cuéntalo en los comentarios.