Curso Java. Herencia I. Vídeo 40
Introducción a la Herencia en Programación Orientada a Objetos
Concepto de Herencia
- La herencia es una característica fundamental de la programación orientada a objetos, considerada como una de las más potentes.
- Se asocia con un concepto de la vida real, donde se trasladan relaciones familiares al ámbito de la programación.
Analogía Familiar
- En el mundo real, una familia típica incluye abuelos, padres e hijos, donde los bienes se transmiten entre generaciones.
- Por ejemplo, un abuelo puede tener una casa que eventualmente heredarán sus hijos y luego sus nietos.
- Los padres también pueden poseer bienes (como coches), que seguirán el mismo patrón de herencia hacia los hijos.
Reutilización del Código
- La herencia en programación permite reutilizar código existente para crear nuevas clases basadas en clases ya definidas.
- Se menciona la creación previa de una clase "coche", que tiene características específicas como ruedas y dimensiones.
Creación de Nuevas Clases
- Al necesitar crear otra clase (por ejemplo, "furgoneta"), se puede utilizar la clase "coche" como base para definir características adicionales o diferentes.
¿Cómo se diferencia una furgoneta de un coche?
Características Comunes y Diferencias
- Una furgoneta comparte muchas características con un coche, como el número de ruedas, pero tiene propiedades únicas que la distinguen.
- Ambas pueden tener dimensiones similares (largo y ancho), e incluso motores iguales, pero su uso y diseño son diferentes.
- La furgoneta puede ofrecer características adicionales como capacidad de carga y más asientos, lo que no es típico en un coche convencional.
- Un coche está diseñado principalmente para transportar personas, mientras que una furgoneta puede albergar tanto personas como carga adicional.
- Las furgonetas pueden acomodar a más de cinco personas, lo cual es una característica distintiva frente a los coches.
Concepto de Herencia en Programación
- La herencia en programación se compara con las diferencias entre coches y furgonetas; cada tipo tiene sus propias características específicas.
- Al crear una clase para la furgoneta, se puede reutilizar el código existente de la clase coche para evitar redundancias.
- Al heredar de la clase coche, la clase furgoneta obtiene automáticamente todas las propiedades y métodos comunes sin necesidad de reprogramarlos.
- La herencia permite ahorrar tiempo en programación al reutilizar código previamente escrito, facilitando el desarrollo eficiente.
- Además de las propiedades, los métodos también son heredados por la nueva clase; esto incluye funcionalidades como determinar si hay aire acondicionado o asientos de cuero.
Implementación Práctica
- Se propone crear una nueva clase "furgoneta" que herede las características básicas definidas en la clase "coche".
- En Eclipse se revisará la estructura previa de la clase coche para asegurar que se mantengan las variables encapsuladas adecuadamente.
- Se recordará cómo se definieron los métodos getter y setter en la clase coche para gestionar sus atributos correctamente.
Creación de Clases en Programación Orientada a Objetos
Definición de la Clase Coche
- Se establece un método para gestionar el peso del coche mediante setter y getter, permitiendo establecer y recuperar el peso total.
- La clase furgoneta hereda las características de la clase coche, pero también incluye métodos específicos para definir su capacidad de carga y número de plazas.
Herencia en Programación
- La herencia permite que una subclase (furgoneta) adquiera propiedades y métodos de una superclase (coche), además de sus propias características.
- Se crea la nueva clase furgoneta en Eclipse, que no tendrá un método Main, manteniendo su relación con la clase coche.
Implementación de Herencia
- En Java, se utiliza la palabra reservada
extendspara indicar que una clase hereda de otra. En este caso, furgoneta extiende coche.
- Al usar
extends, coche se convierte en superclase y furgoneta en subclase dentro de una jerarquía similar a un árbol genealógico.
Conceptos Clave sobre Jerarquías
- La superclase (coche) está en la parte superior del árbol genealógico mientras que la subclase (furgoneta) está por debajo; esto refleja cómo se estructuran las relaciones entre clases.
- Los términos "superclase" y "subclase" son comunes en programación; algunos prefieren "padre" e "hijo" para describir estas relaciones.
Limitaciones de Herencia Múltiple
- A diferencia del mundo real donde se puede heredar de múltiples fuentes, Java no admite herencia múltiple debido a su complejidad.
- Intentar implementar herencia múltiple generaría errores; Java optó por evitar esta confusión al simplificar el modelo con interfaces.
Alternativas a la Herencia Múltiple
- Aunque Java carece de herencia múltiple, se introdujeron interfaces como solución para mantener flexibilidad sin complicar el sistema.
- La decisión fue motivada por los problemas potenciales que surgirían al manejar múltiples niveles de herencias complejas entre muchas clases diferentes.
Características Específicas de Furgonetas
- La clase furgoneta tiene atributos únicos como capacidad de carga y número adicional de plazas que no están presentes en la clase coche.
Creación de un Constructor para la Clase Furgoneta
Definición de Variables en la Clase Furgoneta
- Se introduce una variable privada
int capacidadExtrapara almacenar la capacidad adicional del objeto furgoneta.
- Se define otra variable privada
int plazasExtraque almacenará el número de personas que pueden viajar en la furgoneta.
Estado Inicial del Objeto Furgoneta
- Se discute que el estado inicial de una furgoneta, con capacidad y plazas extra, no es igual al estado inicial de un coche.
- Es necesario construir un constructor específico para la clase furgoneta que asigne valores a las nuevas variables.
Implementación del Constructor
- El constructor recibirá parámetros:
plazasExtraycapacidadCarga, donde este último se considera más identificativo.
- La construcción del constructor se inicia con la apertura y cierre de llaves, estableciendo su estructura básica.
Llamada al Constructor Padre
- Dentro del constructor, se utiliza la palabra reservada
super()para llamar al constructor de la clase padre (coche).
- Al crear un objeto tipo furgoneta, se pasan los parámetros necesarios al constructor padre para establecer su estado inicial.
Asignación de Valores a las Nuevas Variables
- Después de llamar al constructor padre, se asignan valores a las variables
plazasExtraycapacidadCarga.
- Se utiliza el operador
thispara diferenciar entre las variables de clase y los argumentos recibidos por el método.
Finalización del Constructor