JAVA: Introducción a la Herencia ☕ DAM - DAW
Summary
TLDREste video introduce el concepto de herencia en Java, un pilares fundamental de la programación orientada a objetos que permite reutilizar código. Se explica cómo una clase puede heredar atributos y métodos de otra, utilizando las palabras reservadas 'extends', 'protected' y 'super'. Se presentan ejemplos detallados de clases padre e hijas, y cómo se pueden personalizar y extender con atributos y métodos adicionales. Además, se abordan las excepciones en Java, incluyendo cómo capturar, lanzar y propagar excepciones, así como crear excepciones personalizadas.
Takeaways
- 📚 La herencia en Java permite reutilizar código, creando nuevas clases que heredan de otras existentes.
- 🔄 Las clases en Java pueden heredar el comportamiento de una única clase padre, formando una jerarquía de herencia.
- 📝 Las palabras reservadas 'extends', 'protected' y 'super' son fundamentales para la herencia y la interacción con clases padre.
- 📌 'extends' se utiliza para indicar que una clase hija hereda de una clase padre.
- 🔒 'protected' define un nivel de visibilidad intermedio para los atributos y métodos de una clase padre, accesibles solo por clases hijas.
- 👨👧 'super' se refiere a la clase padre y se utiliza para acceder a sus atributos y métodos desde una clase hija.
- 📈 La herencia permite la polimorfismo, donde una clase hija puede redefinir métodos de su clase padre.
- 🛠️ Al invocar un método con el mismo nombre en una clase hija, se ejecutará la versión de la clase hija, a menos que se especifique 'super'.
- 📜 La clase 'Object' es la clase padre implícita de todas las clases en Java, lo que permite una herencia implícita.
- 🔧 Se pueden crear excepciones personalizadas en Java para manejar errores específicos de la aplicación.
- 🔄 La herencia y las excepciones son conceptos avanzados en la programación orientada a objetos que requieren un entendimiento profundo para su correcta implementación.
Q & A
¿Qué es la herencia en la programación orientada a objetos y cómo se utiliza para reutilizar código?
-La herencia es la capacidad de una clase de heredar el comportamiento de otra. Se utiliza para reutilizar código ya que permite crear una nueva clase que hereda los atributos y métodos de una clase existente y añadir nuevos atributos o métodos específicos.
¿Qué son las palabras reservadas 'extends', 'protected' y 'super' en Java y cuál es su propósito?
-'Extends' se utiliza para indicar que una clase hija hereda de una clase padre. 'Protected' es un modificador de acceso que permite que los atributos y métodos de una clase padre sean visibles solo para las clases que heredan de ella. 'Super' se refiere a la clase padre y se utiliza para acceder a sus atributos y métodos.
¿Cómo se declara una clase que hereda de otra en Java?
-Se declara utilizando la palabra reservada 'extends' seguido del nombre de la clase padre.
¿Qué es el polimorfismo y cómo está relacionado con la herencia?
-El polimorfismo es uno de los pilares de la programación orientada a objetos que permite que objetos de diferentes clases tengan la misma interfaz. Está relacionado con la herencia porque permite que una clase hija herede un comportamiento de una clase padre y lo extienda o sobreescriba para mostrar un comportamiento diferente.
¿Cómo se llama al constructor de la superclase en una clase hija?
-Se llama al constructor de la superclase utilizando la palabra reservada 'super' seguido de los parámetros correspondientes al constructor de la clase padre.
¿Qué sucede si un método en la clase hija tiene el mismo nombre que un método en la clase padre?
-Si un método en la clase hija tiene el mismo nombre que uno en la clase padre, se puede invocar el método de la clase padre o el de la clase hija utilizando el operador 'super'. El método invocado dependerá del tipo de instancia sobre la que se invoque.
¿Cómo se diferencian los nombres de las instancias de clases padre e hijas cuando se hereda un atributo?
-Para diferenciar los nombres, se puede utilizar el operador 'super' para acceder al atributo de la clase padre, mientras que el atributo de la clase hija se accede directamente.
¿Qué es la clase 'Object' en Java y cuál es su relación con la herencia?
-La clase 'Object' es la clase padre principal en Java. Todas las clases en Java heredan implícitamente de 'Object', lo que significa que todas las clases tienen acceso a los métodos y atributos de 'Object'.
¿Cómo se pueden ver los efectos de la herencia en un programa Java?
-Los efectos de la herencia se pueden ver al crear instancias de clases hijas y observar cómo heredan y extienden el comportamiento de las clases padre, incluyendo la implementación de métodos y la gestión de atributos.
¿Qué es la visibilidad 'protected' y cómo afecta la herencia?
-La visibilidad 'protected' permite que los atributos y métodos de una clase sean accesibles por las clases que heredan de ella, ofreciendo una restricción intermedia entre 'public' (visible para todos) y 'private' (visible solo dentro de la clase).
¿Cómo se pueden personalizar excepciones en Java?
-Para personalizar excepciones en Java, se pueden crear nuevas clases que heredan de 'Exception' o 'RuntimeException' y se pueden lanzar y propagar en el código utilizando las palabras reservadas 'throw' y 'throws'.
Outlines
📚 Introducción a la herencia y excepciones en Java
Este primer párrafo introduce el sexto tema del curso de programación, enfocado en la herencia y el uso de excepciones en Java. Se menciona que la herencia permite reutilizar código y se dividirá en tres partes: herencia, polimorfismo, interfaces y clases abstractas, y tratamiento de excepciones. Se destaca la importancia de la herencia para reutilizar código y se presentan las palabras reservadas 'extends', 'protected' y 'super', explicando su funcionamiento en la herencia de clases.
🔗 Implementación de herencia entre clases Padre e Hija
El segundo párrafo describe con ejemplos prácticos cómo una clase hija puede heredar de una clase padre en Java. Se explica cómo se utiliza 'extends' para indicar la relación de herencia y cómo se accede a los métodos y atributos de la clase padre utilizando 'super'. Se detalla el proceso de creación de una instancia de la clase hija, incluyendo la llamada al constructor de la clase padre y la asignación de atributos adicionales en la clase hija.
📝 Métodos y atributos en clases padre e hijas
Este párrafo profundiza en la diferenciación de métodos y atributos entre clases padre e hijas. Se ilustra cómo se pueden tener métodos con el mismo nombre en ambas clases y cómo se resuelve la ambigüedad en la invocación de estos métodos. Se añade un atributo adicional a la clase padre y se muestra cómo se hereda y se utiliza en la clase hija, incluyendo la modificación del método 'Mostrar info' para acceder a los datos de ambas clases.
🔄 Modificación y visualización de instancias de clases padre e hijas
El cuarto párrafo explica cómo se pueden modificar y visualizar instancias de clases padre e hijas en Java. Se presentan ejemplos de cómo se pueden crear instancias con diferentes atributos y cómo se pueden diferenciar los nombres de instancias utilizando 'super'. Se muestra cómo se puede invocar el método 'Mostrar info' para mostrar información de la clase hija y cómo se puede acceder directamente al nombre de la clase padre a través de un atributo. Finalmente, se propone una mejora en la implementación del método 'Mostrar info' para mejorar la claridad de la información mostrada.
Mindmap
Keywords
💡Herencia
💡Polimorfismo
💡Interfaces
💡Clases abstractas
💡Excepciones
💡Extens (extends)
💡Protected
💡Super
💡Constructores
💡Métodos Sobrescritos (Overridden Methods)
💡Encapsulamiento
Highlights
Introducción al sexto tema del curso de programación en Java, enfocado en la herencia y el uso de excepciones.
La herencia permite reutilizar código, basándose en una clase ya definida para crear una nueva que herede sus características.
Las cuatro bases de la programación orientada a objetos son la abstracción, el encapsulamiento, el polimorfismo y la herencia.
La herencia es la capacidad de una clase para heredar el comportamiento de otra, facilitando la reutilización de código.
Las palabras reservadas 'extends', 'protected' y 'super' son fundamentales para entender la herencia en Java.
La palabra 'extends' se utiliza para indicar que una clase hija hereda de una clase padre.
La palabra 'protected' define un nivel de visibilidad intermedio para los atributos y métodos de una clase padre.
La palabra 'super' se utiliza para hacer referencia a la clase padre y acceder a sus atributos y métodos.
Todas las clases en Java heredan implícitamente de la clase 'Object'.
Ejemplo práctico de una clase padre 'Padre' con un atributo 'nombre' y un constructor.
Ejemplo de una clase hija 'Hija' que hereda de 'Padre' y añade un atributo 'edad' y un constructor.
Demostración de cómo la clase hija puede llamar al constructor de la clase padre usando 'super'.
Explicación de cómo se manejan los métodos con el mismo nombre en clases padre e hijas (polimorfismo).
Ejemplo de cómo se puede diferenciar el nombre de una instancia de la clase hija del nombre de la clase padre usando 'super'.
Visualización de la herencia y métodos en Visual Studio Code para entender mejor la implementación.
Ejemplo de cómo se pueden invocar métodos de la clase padre o de la clase hija dependiendo del tipo de instancia.
Explicación de cómo se pueden acceder a los atributos de la clase padre directamente a través de 'super'.
Demostración de cómo se pueden personalizar los métodos 'Mostrar info' en la clase hija para mostrar información específica.
Ejemplo de cómo se pueden modificar los métodos para mostrar información de la clase padre y de la clase hija de manera diferenciada.
Conclusión del tema con una promesa de ejemplos adicionales en el próximo vídeo para asimilar mejor los conceptos.
Transcripts
con este vídeo Empezamos el sexto tema
del curso de programación y lo que
veremos en esta unidad es la herencia y
el uso de excepciones en Java aquí
podéis ver el índice que vamos a seguir
a lo largo de esta unidad y básicamente
está dividido en tres partes en la
primera parte hablaremos de la herencia
como la podemos utilizar para poder
reutilizar código además también veremos
otro de Los pilares básicos de la
programación orientada a objetos como es
el polimorfismo y finalmente veremos
tanto interfaces como clases abstractas
luego Tendremos una segunda parte donde
aprenderemos a comparar objetos y
finalmente la última parte la vamos a
dedicar al tratamiento de excepciones
veremos Cómo capturarlas lanzarlas y
propagarlas y además Cómo crear nuestras
propias excepciones personalizadas
[Música]
y bien tal y como vimos ya en la unidad
anterior la programación orientada a
objetos se basa en cuatro Pilares
básicos que son la abstracción el
encapsulamiento el polimorfismo y la
herencia la herencia es la capacidad que
tiene una clase de heredar el
comportamiento de otra Entonces esto
resulta muy útil para reutilizar código
Ya que en base a una clase ya definida
podremos crear una nueva que heredará
todo lo que tiene esa otra clase Pero
además podrá Añadir tanto atributos como
métodos adicionales que sean específicos
de esa clase entonces a partir de Aquí
vamos a ver tres nuevas palabras
reservadas que son el extens protected y
super en primer lugar tenemos el extens
que será lo que utilizaremos para
indicar que una clase hija va a heredar
de una clase padre Entonces cuando
definamos una clase lo que haremos es
indicarle a continuación del nombre de
la clase
la palabra reservada extens y la clase
de la cual queremos que herede ese
comportamiento y algo importante es que
únicamente podemos hacer el extens de
una clase es decir una clase solo puede
heredar el comportamiento de otra sin
embargo sí que podemos tener diferentes
niveles de herencia es decir yo podía
tener una clase a querer el
comportamiento de una clase B pero a su
vez que ve también este heredando de
otra clase de hecho en Java todo hereda
de object es decir todas las clases que
creemos implícitamente están heredando
el comportamiento de una clase padre
principal que es la clase object Aunque
bueno tampoco quiero entrar Ahora mucho
en detalle en esto ya que lo veremos más
adelante a lo largo de la unidad a
continuación tendríamos la palabra
reservada protected que no sirve para
indicar un tipo de visibilidad a los
atributos y métodos de una clase padre
es decir una clase sobre la cual se va a
heredar su comportamiento
Entonces si declaramos en una clase
tanto atributos como métodos con el
modificador de acceso protected esto lo
que implica es que únicamente van a
tener visible esos atributos y esos
métodos aquellas clases que hereden el
comportamiento de la clase que ha
definido esos atributos protected es
decir sería una restricción intermedia
entre el public y el private el private
no lo podrá ver nadie el público lo
verán todos y el protect Únicamente lo
verán aquellas clases que hereden de esa
clase que tiene el atributo o el método
protected y finalmente tenemos el súper
que se utiliza para hacer referencia a
la clase padre o súper clase a esa clase
que estamos heredando el comportamiento
se le llama padre o súper clase entonces
a partir del súper podemos acceder a los
atributos y los métodos de esa súper
clase normalmente lo que se suele hacer
lo más común es llamar al constructor de
la superclase a través del súper que
cuando creamos una clase que hereda de
otra realmente en el constructor solo
nos fijaremos en esos atributos
adicionales que tiene esa clase ya que
como estaré dando el comportamiento de
otra pues lo que serían los atributos
que hereda también se generarán a partir
del constructor de la clase de padre
entiendo que esto al principio puede
confundir un poco pero bueno ahora vamos
a ver una serie de ejemplos y veréis
como no tiene ninguna dificultad para
ello vamos a pasar a la siguiente
diapositiva donde tenemos dos clases una
clase que se llama padre y otra clase
que se llama hija en principio la clase
padre únicamente tiene un atributo que
se llama nombre y un constructor ese
constructor lo que hace es inicializar
la variable distancia nombre a partir de
una String que recibimos como parámetro
en el constructor y a continuación
además Se imprime por pantalla con un
print es el nombre que hemos recibido
como parámetro
entonces aquí tendríamos una clase
Únicamente con ese constructor y luego
bajo tendríamos otra clase en este caso
se llama hija y fijaros que aquí tenemos
el extens padre Entonces al incluir esta
instrucción lo que estamos indicando Es
que la clase hija va a heredar el
comportamiento de la clase que tenemos a
continuación a la derecha del extenso en
este caso la clase padre por lo tanto
siempre que queremos una instancia de la
clase hija también tendremos acceso a el
nombre que realmente es del padre y aquí
en esta clase tenemos un atributo
adicional que se llama edad y luego un
constructor que recibe un entero y una
String entonces fijamos aquí realmente
lo que está haciendo este constructor de
la clase hija en primer lugar llama al
constructor de la clase padre a través
de súper esto Realmente está accediendo
a este constructor y le está pasando
como parámetro padre que es la String
que recibe el constructor de la clase
hija en este caso cuando vemos una
distancia de hija recibiremos un entero
y una String pues Einstein que recibamos
como parámetro se la pasaremos al
constructor de la clase padre y se
guardará en nombre por lo tanto esta
instrucción lo que hace es guardar en la
clase Padre en el nombre esas String que
recibimos como parámetro y además luego
me la imprimirá por pantalla a través de
este print una vez termina el
constructor de la clase padre seguimos
en el constructor de la clase hija Y en
este caso guardamos en la variable
distanciada esa edad que recibimos como
parámetro y finalmente mostramos por
pantalla tiene una hija de concatenado
con el valor de edad que hemos recibido
y concatenado con años entonces aquí si
os fijáis en primer lugar el constructor
de arriba tiene un print pero sin el Ln
entonces lo que hará el súper será
imprimir el nombre del Padre Y luego
concatenarlo con tiene una hija de la
cantidad de años que hayamos puesto por
ejemplo si aquí hemos utilizado un 5 y
PP Pues el resultado será que Pepe tiene
una hija de 5 años
aparte en edad habrá un 5 y en el nombre
de la clase padre tendremos el nombre
Pepe
bien pero pasemos ahora a hacer una
modificación adicional
fijaros que ahora tenemos la clase padre
y la clase hija sin embargo aquí la
clase padre tiene un método adicional
que se llama Mostrar info que hace un
print de Ln de la palabra padre dos
puntos y el nombre pero bajo hemos
añadido además una String nueva que
también se llama nombre por lo tanto
hija tendrá una String nombre un entero
edad Pero además tendrá otro String
nombre correspondiente a la clase que
está heredando entonces realmente esta
String representará el nombre de la hija
mientras que la String del padre
representa el nombre del Padre Entonces
ahora tenemos un constructor en la clase
hija que recibe tanto la edad como dos
strings la steam del padre y la String
de la hija entonces lo primero como
siempre invocamos al constructor de la
clase padre que realmente lo que hacía
era guardar en el nombre de la clase
padre esa String que recibe como
parámetro que será el segundo parámetro
que recibe el constructor de la clase
hija importante que no lo he dicho antes
es que siempre que hagamos un súper
respecto a un constructor debe ir como
primera instrucción de ese constructor
de lo contrario nos dará un error sin
embargo no sucede lo mismo cuando
accedemos a un atributo o a un método en
ese caso sí que lo podemos utilizar
cuando queramos como podéis ver en el
ejemplo de aquí más abajo bien entonces
una vez ha guardado el nombre y Se
imprime por pantalla lo que hará será
guardar en la instancia de hija en el
atributo nombre esa tercera String que
recibimos como parámetro y en la
variable distanciada pues ese primer
atributo que se recibe en el constructor
y finalmente de nuevo imprime ese mismo
mensaje de antes en este caso lo tenemos
igual que antes no pone el nombre de la
hija sin embargo luego tenemos un método
Mostrar info que realmente tiene el
mismo nombre que en la clase padre el
nombre es exactamente el mismo y esto es
perfectamente válido entonces aquí se
debe tener en cuenta que este Mostrar
info ejecutará o uno u otro dependiendo
del tipo de distancia sobre el que se
invoque si tenemos una instancia de tipo
hija invocamos a mostrar info sea
ejecutará este método de aquí sin
embargo si tenemos una distancia de la
clase padre se invocará el de arriba y
aquí a su vez de hecho Mostrar info
accede a el método de la clase padre y
lo hace a través del súper entonces lo
que hará será en primer lugar hacer este
print de Ln y luego invocar a mostrar
info que hace otro print en el primero
me muestra los datos de la hija y en el
segundo me muestra los datos del padre
de la hija tiene nada y del padre solo
tiene el nombre y bien para que se
entienda todo esto mejor pues vamos a
ver este mismo ejemplo en visual Studio
code para ello vamos a ir a editor y
aquí tendríamos las clases como en el
primer ejemplo
tenemos el padre con el nombre y la hija
Únicamente con la edad
Entonces si ahora aquí en un Main
creamos una instancia de la clase padre
por ejemplo padre p = New padre y le
pasamos Pepe aquí realmente al
ejecutarlo pues me mostrará simplemente
el nombre Pepe y ya está sin embargo si
en vez de crear una instancia de la
clase padre la creamos de la clase hija
ponemos h1 igual a New hija pasándole un
5 y Pepe ahora de ejecutarlo
me mostrará Pepe tiene una hija de 5
años
bien pero veamos ahora el otro ejemplo
ahora tenemos la clase padre con el
método Mostrar info y la clase hija
también con el método Mostrar info Pero
además la clase hija tiene ahora un
atributo nombre por lo tanto como hemos
dicho antes tendremos un nombre tanto de
la hija como un nombre tanto del padre
ya que estamos extendiendo de esa clase
padre que a su vez tiene una String
nombre Entonces si quisiéramos
diferenciar el nombre de la instancia
del nombre de la clase padre lo haríamos
a través del súper entonces veamos en
primer lugar un ejemplo creando
instancias de la clase hija ahora con
estos tres atributos entonces para ello
de nuevo en el Main haremos hija h1
igual a nihuija fijaros que ahora me
pide tres parámetros por ejemplo primero
cinco años luego el nombre del padre
Pepe y el nombre de la hija Por ejemplo
Marta si ahora lo ejecutamos
me indica Pepe tiene una hija de 5 años
para formar esas String está utilizando
tanto el constructor de la clase hija
como el constructor de la clase padre lo
primero que hace es ir a el súper de
Padre pasándole en este caso Pepe
Entonces se guarda en la instancia y a
continuación se hace un print de ese
nombre que sería esta parte de aquí a
continuación
guarda como variables de distancia el
nombre a partir del Tercer parámetro que
es hija y la edad y a continuación
imprime tiene una hija de concatenado
con edad concatenado con años que
realmente es esta parte de aquí
Y si ahora por ejemplo en h1
invoco a mostrar info y ahora lo
ejecutamos me muestra esta información
de aquí hija Marta coma edad dos puntos
cinco años esto realmente invoca el
método Mostrar info sobre la instancia
h1 por lo tanto como h1 es una instancia
de la clase hija Estamos invocando a
mostrar info de la clase hija entonces
iremos a esta clase
y este es el método que se invoca en
primer lugar Se imprime la información
de la hija sea el nombre luego edad lo
concatena con edad y finalmente invoca a
mostrar info de la clase padre ya que
utiliza el súper Entonces si vamos ahora
a clase padre
esa segunda línea la muestra este método
padre Pepe
sin embargo si ahora aquí por ejemplo
ponemos una clase padre
p1 igual a New padre y le ponemos Tom
Ahora sí hago p1 Mostrar info
evidentemente invocará el método de la
clase padre ya que p1 es una instancia
de esa clase si lo ejecutamos aquí
fijaros lo que ha pasado en primer lugar
este Tom realmente se genera crear este
constructor lo a continuación a crear la
instancia de hija me imprime todo esto
de aquí y finalmente el p1 mostrará info
me muestra la info de la instancia p1
que es una instancia de la clase padre
por lo tanto me muestra este Mostrar
info compadre dos puntos y el nombre
bien pero hagamos algún ejemplo
adicional para que se termine de
entender todo esto bien ahora por
ejemplo vamos a la clase hija Y en vez
de mostrar info de esta forma vamos por
ejemplo acceder a el nombre del Padre
directamente a través de un atributo
podríamos hacerlo de la siguiente forma
un sishot Aquí voy a poner padre dos
puntos y concatenarlo con súper punto
nombre este es súper punto nombre es la
forma que tenemos de diferenciar el
nombre que tenemos como variable de
distancia del nombre que tenemos de la
clase padre que sería este de aquí
entonces aquí realmente accederé a ese
atributo nombre de la clase padre e
incluso aquí podríamos tener un tercer
atributo que fuera nombre String nombre
Entonces ahora realmente esta segunda
línea cuando accede a nombre está
accediendo al parámetro de hecho ahora
cuando invoquemos a mostrar info
sobre una instancia de la clase hija
vamos a quitar esta de aquí y vamos a
poner h1 y Aquí vamos al info le ponemos
Tom Ahora cuando lo ejecutemos fijaros
que ha sucedido aquí creamos la
instancia y me indica que Pepe tiene una
hija de 5 años sin embargo luego cuando
invocamos a mostrar info genera estas
dos líneas pone padre Pepe y luego hija
Tom edad 5 años pero realmente la
instancia hija el nombre está guardado
como Marta pero claro al invocar a
mostrar info pasándole un String esa
String se le está pasando en la segunda
línea después de hija entonces aquí para
que acceda realmente al nombre de la
instancia de esa hija lo haríamos a
través del Dish
y aquí por ejemplo podemos utilizar
nombre como cabecera por ejemplo aquí
podríamos nombre y desde el Main pues
podríamos invocarlo Mostrar info y poner
pues por ejemplo estos son los datos
dos puntos Entonces ahora cuando lo
ejecutamos de nuevo esto lo genera el
constructor y luego mostraré info es
String que le pasamos como parámetro
realmente va en la primera línea y luego
tenemos padre PP hija Marta edad 5 años
y bien nada lo voy a dejar como estaba
simplemente era para que vierais este
ejemplo entonces quitaremos a String
nombre demostrar info quitaremos este
print Ln Y llamaremos de nuevo Primero a
super punto Mostrar info que mostrará
los datos del padre y aquí por ejemplo
en vez de poner edad voy a poner tiene y
ya está y además voy a quitar los isos
de los constructores para que no muestre
esa información
Entonces ahora cuando la ejecutemos de
nuevo
el constructor no genera ningún String y
Mostrar info pues me muestra padre Pepe
hija Marta tiene 5 años
y bien nada de momento lo vamos a dejar
aquí y en el siguiente vídeo pues
veremos algún ejemplo adicional para que
se termine de asimilar todo esto mejor
Browse More Related Video
La Lógica de HERENCIA explicada con Minecraft
🚀 HERENCIA en JAVA | 🤔| Programación Orientada a Objetos con Java 🖥️ | Explicación FÁCIL 2023 | #6
🚀 CLASES ABSTRACTAS en JAVA | 🤔| Programación Orientada a Objetos 🖥️ | Explicación FÁCIL 2023 | #9
Programación Orientada a Objetos (POO): Abstracción, Encapsulamiento, Herencia, Polimorfismo
Java desde cero con Eclipse [Parte 2] (Programacion Orientada a Objetos)
¿Qué es la Herencia? - Programación Orientada a Objetos
5.0 / 5 (0 votes)