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
Herencia en Java con extends y super
Resumen
Imagina que Platzi Play ya no solo maneja películas, sino también documentales. Modelar ambos como si fueran lo mismo no tiene sentido, y duplicar código tampoco. Aquí entra la herencia en Java, el tercer pilar de la programación orientada a objetos que permite reutilizar atributos y métodos entre clases relacionadas.
Esta guía es para ti si estás aprendiendo POO y quieres entender cómo organizar clases que comparten una base común sin repetir lógica.
¿Qué es la herencia en programación orientada a objetos?
La herencia es el mecanismo que permite que una clase hija reutilice los atributos y métodos de una clase padre. En el ejemplo de Platzi Play, se reemplaza la clase específica Película por una clase más general llamada Contenido, de la cual heredan tanto Película como Documental.
¿Para qué sirve la herencia? Sirve para evitar duplicar código y compartir comportamiento común entre clases que pertenecen a la misma familia conceptual. La clase padre define la base; las hijas la extienden.
Todos los contenidos de la plataforma comparten una estructura base:
- Título.
- Descripción.
- Duración.
- Género.
- Fecha de estreno.
- Calificación.
- Disponibilidad.
Esa estructura vive en la clase Contenido, y cualquier tipo nuevo que agregues mañana (series, cortos, podcasts) puede partir desde ahí [01:30].
¿Cómo se implementa la herencia con extends en Java?
El primer paso fue renombrar la clase Película a Contenido usando la opción rename with preview del IDE. Esto actualiza automáticamente constructores, parámetros y referencias en toda la aplicación, incluyendo el main, las excepciones y el método de reproducir [02:30].
Luego se crea una nueva clase Película que ya no repite atributos, sino que declara que extiende de la clase padre:
java public class Pelicula extends Contenido { public Pelicula(String titulo, int duracion, String genero, double calificacion) { super(titulo, duracion, genero, calificacion); } }
Al usar extends Contenido, le dices a Java que Película hereda todos los atributos y métodos del padre. Si el IDE marca una advertencia, es porque la clase padre exige un constructor específico, y la hija debe llamarlo con super(...) [04:00].
¿Por qué usar super en el constructor de la clase hija?
La palabra clave super invoca el constructor de la clase padre y garantiza que los atributos heredados se inicialicen antes de cualquier lógica propia de la hija. Es la forma de decirle a Java: primero arma la base, luego yo agrego lo mío.
¿Cómo extender una clase hija con atributos propios?
Una clase hija puede heredar todo y además agregar sus propias particularidades. Esa es la parte interesante de la extensibilidad. La clase Documental extiende de Contenido, pero suma un atributo que las películas no necesitan: el narrador.
java public class Documental extends Contenido { private String narrador;
public Documental(String titulo, int duracion, String genero, double calificacion, String narrador) { super(titulo, duracion, genero, calificacion); this.narrador = narrador; } public String getNarrador() { return narrador; }
}
Fíjate en el orden: primero super(...), después this.narrador = narrador. Esa secuencia es obligatoria. Java necesita construir la base antes de que la hija pueda añadir su información [05:30].
¿Puede una clase hija tener atributos que el padre no tiene? Sí. Heredar no significa quedarte con lo mismo del padre; puedes añadir atributos y métodos propios, como
narradorenDocumental.
¿Cómo aprovechar la herencia desde la clase main?
En el main, el método para agregar ya no recibe simplemente una película. Ahora pregunta al usuario qué tipo de contenido quiere registrar:
java int tipoContenido = ScannerUtils.capturarNumero( "¿Qué tipo de contenido quieres agregar?\n1. Película\n2. Documental" );
if (tipoContenido == 1) { new Pelicula(titulo, duracion, genero, calificacion); } else { String narrador = ScannerUtils.capturarTexto("Narrador del documental"); new Documental(titulo, duracion, genero, calificacion, narrador); }
Lo poderoso es que el método agregar recibe un parámetro de tipo Contenido, pero gracias a la herencia puede aceptar tanto Película como Documental sin cambios. Esa flexibilidad es la antesala del polimorfismo [07:30].
¿Qué ganas al aplicar herencia en tu proyecto?
Al probar el flujo agregando un documental llamado Oasis, género terror, duración 60 minutos, calificación 3.2 y narrador Alejandro Ramírez, la plataforma lo registra y lo muestra junto a las películas usando la misma estructura base [08:30].
Los beneficios concretos:
- Menos código duplicado entre clases relacionadas.
- Estructura conceptual más clara y escalable.
- Capacidad de añadir nuevos tipos de contenido sin reescribir la base.
- Métodos genéricos que funcionan con cualquier subclase.
En la siguiente clase entra en juego el operador instanceof, útil cuando necesitas saber en tiempo de ejecución qué tipo concreto está detrás de una referencia que usa herencia. ¿Ya tienes claro cómo modelarías tus propias clases padre e hijas? Cuéntalo en los comentarios.