JAVA: Introducción a la Herencia ☕ DAM - DAW

Aula en la nube
13 Feb 202316:36

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

00:00

📚 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.

05:00

🔗 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.

10:03

📝 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.

15:04

🔄 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

La herencia es un concepto fundamental en la programación orientada a objetos que permite a una clase 'hija' heredar atributos y métodos de otra clase 'padre'. Esto facilita la reutilización de código y la creación de nuevas clases a partir de clases existentes. En el video, se utiliza para mostrar cómo se pueden crear nuevas clases que heredan de una clase padre, como la clase 'hija' que hereda de la clase 'padre'.

💡Polimorfismo

El polimorfismo es la capacidad de una sola entidad de adoptar múltiples formas. En programación, se refiere a la capacidad de una variable o método para representar o comportarse de manera diferente dependiendo del tipo de objeto al que se aplique. En el contexto del video, se menciona como uno de los pilares de la programación orientada a objetos, aunque no se profundiza en su explicación.

💡Interfaces

Una interfaz en Java es un conjunto de métodos abstractos que no tienen implementación. Las clases pueden implementar una o más interfaces, lo que les obliga a proporcionar una implementación para todos los métodos de la interfaz. En el video, se menciona que se verán interfaces y clases abstractas, lo que indica que se abordará cómo se utilizan para definir comportamientos comunes a varias clases sin especificar su implementación.

💡Clases abstractas

Una clase abstracta es una clase que no puede ser instanciada directamente y que generalmente contiene al menos un método abstracto. Se utilizan para definir la estructura de una superclase que otras clases pueden extender. En el video, se indica que se hablará de clases abstractas, lo que implica que se abordará cómo se utilizan para crear clases que no se instancian directamente, sino que sirven como plantilla para otras clases.

💡Excepciones

Las excepciones son eventos que ocurren durante la ejecución de un programa que interrumpen el flujo normal de la ejecución. En Java, se utilizan para manejar errores de manera estructurada. El video menciona el tratamiento de excepciones, lo que incluirá cómo se capturan, lanzan y propagan, así como la creación de excepciones personalizadas.

💡Extens (extends)

La palabra reservada 'extends' en Java se utiliza para indicar que una clase 'hija' hereda de una clase 'padre'. En el video, se explica que al usar 'extends' se establece la relación de herencia entre clases, como en el ejemplo donde la clase 'hija' hereda del comportamiento de la clase 'padre'.

💡Protected

El modificador de acceso 'protected' en Java define un nivel de acceso intermedio entre 'public' y 'private'. Los atributos y métodos marcados como 'protected' solo son accesibles por las clases que heredan del mismo paquete o por clases que heredan directamente de la clase que los define. En el video, se menciona cómo se utiliza 'protected' para restringir la visibilidad de los atributos y métodos de una clase padre.

💡Super

La palabra reservada 'super' en Java se refiere a la instancia de la clase padre de la cual se está heredando. Se utiliza para acceder a los atributos y métodos de la clase padre. En el video, se ilustra cómo se usa 'super' para invocar al constructor de la clase padre y para diferenciar entre los nombres de las clases padre e hija.

💡Constructores

Los constructores son métodos especiales en Java que se utilizan para inicializar los objetos de una clase. Cuando se crea una instancia de una clase, se invoca el constructor para configurar el estado inicial del objeto. En el video, se explica cómo se utilizan los constructores en la herencia, incluyendo la llamada al constructor de la clase padre con 'super'.

💡Métodos Sobrescritos (Overridden Methods)

Un método sobrescrito es un método en una clase hija que tiene la misma firma que un método en la clase padre. Cuando se invoca un método sobrescrito, se ejecuta la implementación de la clase hija en lugar de la de la clase padre. En el video, se menciona cómo se pueden sobrescribir métodos en la clase hija, como el método 'Mostrar info' que se define tanto en la clase padre como en la clase hija.

💡Encapsulamiento

El encapsulamiento es un principio de la programación orientada a objetos que involucra la ocultación de los detalles de implementación y la exposición de un conjunto limitado de interfaces. Esto permite proteger los datos y controlar cómo se accede a ellos. Aunque el video no profundiza en el encapsulamiento, se menciona como uno de los pilares de la programación orientada a objetos.

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

play00:00

con este vídeo Empezamos el sexto tema

play00:03

del curso de programación y lo que

play00:05

veremos en esta unidad es la herencia y

play00:09

el uso de excepciones en Java aquí

play00:11

podéis ver el índice que vamos a seguir

play00:13

a lo largo de esta unidad y básicamente

play00:16

está dividido en tres partes en la

play00:18

primera parte hablaremos de la herencia

play00:20

como la podemos utilizar para poder

play00:22

reutilizar código además también veremos

play00:25

otro de Los pilares básicos de la

play00:27

programación orientada a objetos como es

play00:29

el polimorfismo y finalmente veremos

play00:32

tanto interfaces como clases abstractas

play00:35

luego Tendremos una segunda parte donde

play00:37

aprenderemos a comparar objetos y

play00:40

finalmente la última parte la vamos a

play00:43

dedicar al tratamiento de excepciones

play00:45

veremos Cómo capturarlas lanzarlas y

play00:48

propagarlas y además Cómo crear nuestras

play00:51

propias excepciones personalizadas

play00:56

[Música]

play00:59

y bien tal y como vimos ya en la unidad

play01:01

anterior la programación orientada a

play01:04

objetos se basa en cuatro Pilares

play01:06

básicos que son la abstracción el

play01:09

encapsulamiento el polimorfismo y la

play01:12

herencia la herencia es la capacidad que

play01:15

tiene una clase de heredar el

play01:18

comportamiento de otra Entonces esto

play01:20

resulta muy útil para reutilizar código

play01:24

Ya que en base a una clase ya definida

play01:26

podremos crear una nueva que heredará

play01:29

todo lo que tiene esa otra clase Pero

play01:31

además podrá Añadir tanto atributos como

play01:34

métodos adicionales que sean específicos

play01:36

de esa clase entonces a partir de Aquí

play01:39

vamos a ver tres nuevas palabras

play01:41

reservadas que son el extens protected y

play01:44

super en primer lugar tenemos el extens

play01:47

que será lo que utilizaremos para

play01:48

indicar que una clase hija va a heredar

play01:52

de una clase padre Entonces cuando

play01:54

definamos una clase lo que haremos es

play01:56

indicarle a continuación del nombre de

play01:58

la clase

play01:59

la palabra reservada extens y la clase

play02:01

de la cual queremos que herede ese

play02:04

comportamiento y algo importante es que

play02:06

únicamente podemos hacer el extens de

play02:09

una clase es decir una clase solo puede

play02:11

heredar el comportamiento de otra sin

play02:14

embargo sí que podemos tener diferentes

play02:16

niveles de herencia es decir yo podía

play02:18

tener una clase a querer el

play02:20

comportamiento de una clase B pero a su

play02:23

vez que ve también este heredando de

play02:25

otra clase de hecho en Java todo hereda

play02:29

de object es decir todas las clases que

play02:31

creemos implícitamente están heredando

play02:33

el comportamiento de una clase padre

play02:35

principal que es la clase object Aunque

play02:38

bueno tampoco quiero entrar Ahora mucho

play02:40

en detalle en esto ya que lo veremos más

play02:41

adelante a lo largo de la unidad a

play02:45

continuación tendríamos la palabra

play02:46

reservada protected que no sirve para

play02:48

indicar un tipo de visibilidad a los

play02:52

atributos y métodos de una clase padre

play02:54

es decir una clase sobre la cual se va a

play02:57

heredar su comportamiento

play02:59

Entonces si declaramos en una clase

play03:01

tanto atributos como métodos con el

play03:04

modificador de acceso protected esto lo

play03:06

que implica es que únicamente van a

play03:08

tener visible esos atributos y esos

play03:11

métodos aquellas clases que hereden el

play03:13

comportamiento de la clase que ha

play03:15

definido esos atributos protected es

play03:18

decir sería una restricción intermedia

play03:19

entre el public y el private el private

play03:22

no lo podrá ver nadie el público lo

play03:25

verán todos y el protect Únicamente lo

play03:28

verán aquellas clases que hereden de esa

play03:30

clase que tiene el atributo o el método

play03:32

protected y finalmente tenemos el súper

play03:35

que se utiliza para hacer referencia a

play03:38

la clase padre o súper clase a esa clase

play03:40

que estamos heredando el comportamiento

play03:41

se le llama padre o súper clase entonces

play03:45

a partir del súper podemos acceder a los

play03:49

atributos y los métodos de esa súper

play03:51

clase normalmente lo que se suele hacer

play03:54

lo más común es llamar al constructor de

play03:57

la superclase a través del súper que

play03:59

cuando creamos una clase que hereda de

play04:01

otra realmente en el constructor solo

play04:03

nos fijaremos en esos atributos

play04:05

adicionales que tiene esa clase ya que

play04:08

como estaré dando el comportamiento de

play04:09

otra pues lo que serían los atributos

play04:11

que hereda también se generarán a partir

play04:13

del constructor de la clase de padre

play04:15

entiendo que esto al principio puede

play04:17

confundir un poco pero bueno ahora vamos

play04:19

a ver una serie de ejemplos y veréis

play04:21

como no tiene ninguna dificultad para

play04:23

ello vamos a pasar a la siguiente

play04:25

diapositiva donde tenemos dos clases una

play04:28

clase que se llama padre y otra clase

play04:30

que se llama hija en principio la clase

play04:32

padre únicamente tiene un atributo que

play04:34

se llama nombre y un constructor ese

play04:38

constructor lo que hace es inicializar

play04:39

la variable distancia nombre a partir de

play04:42

una String que recibimos como parámetro

play04:43

en el constructor y a continuación

play04:45

además Se imprime por pantalla con un

play04:47

print es el nombre que hemos recibido

play04:49

como parámetro

play04:51

entonces aquí tendríamos una clase

play04:52

Únicamente con ese constructor y luego

play04:55

bajo tendríamos otra clase en este caso

play04:57

se llama hija y fijaros que aquí tenemos

play05:00

el extens padre Entonces al incluir esta

play05:03

instrucción lo que estamos indicando Es

play05:05

que la clase hija va a heredar el

play05:08

comportamiento de la clase que tenemos a

play05:10

continuación a la derecha del extenso en

play05:13

este caso la clase padre por lo tanto

play05:15

siempre que queremos una instancia de la

play05:16

clase hija también tendremos acceso a el

play05:20

nombre que realmente es del padre y aquí

play05:22

en esta clase tenemos un atributo

play05:24

adicional que se llama edad y luego un

play05:26

constructor que recibe un entero y una

play05:29

String entonces fijamos aquí realmente

play05:31

lo que está haciendo este constructor de

play05:33

la clase hija en primer lugar llama al

play05:37

constructor de la clase padre a través

play05:39

de súper esto Realmente está accediendo

play05:42

a este constructor y le está pasando

play05:44

como parámetro padre que es la String

play05:46

que recibe el constructor de la clase

play05:49

hija en este caso cuando vemos una

play05:51

distancia de hija recibiremos un entero

play05:53

y una String pues Einstein que recibamos

play05:55

como parámetro se la pasaremos al

play05:57

constructor de la clase padre y se

play06:00

guardará en nombre por lo tanto esta

play06:02

instrucción lo que hace es guardar en la

play06:04

clase Padre en el nombre esas String que

play06:07

recibimos como parámetro y además luego

play06:09

me la imprimirá por pantalla a través de

play06:10

este print una vez termina el

play06:12

constructor de la clase padre seguimos

play06:14

en el constructor de la clase hija Y en

play06:16

este caso guardamos en la variable

play06:18

distanciada esa edad que recibimos como

play06:20

parámetro y finalmente mostramos por

play06:22

pantalla tiene una hija de concatenado

play06:26

con el valor de edad que hemos recibido

play06:27

y concatenado con años entonces aquí si

play06:30

os fijáis en primer lugar el constructor

play06:31

de arriba tiene un print pero sin el Ln

play06:35

entonces lo que hará el súper será

play06:37

imprimir el nombre del Padre Y luego

play06:39

concatenarlo con tiene una hija de la

play06:42

cantidad de años que hayamos puesto por

play06:44

ejemplo si aquí hemos utilizado un 5 y

play06:46

PP Pues el resultado será que Pepe tiene

play06:49

una hija de 5 años

play06:51

aparte en edad habrá un 5 y en el nombre

play06:54

de la clase padre tendremos el nombre

play06:56

Pepe

play06:58

bien pero pasemos ahora a hacer una

play07:00

modificación adicional

play07:01

fijaros que ahora tenemos la clase padre

play07:04

y la clase hija sin embargo aquí la

play07:08

clase padre tiene un método adicional

play07:10

que se llama Mostrar info que hace un

play07:12

print de Ln de la palabra padre dos

play07:15

puntos y el nombre pero bajo hemos

play07:18

añadido además una String nueva que

play07:20

también se llama nombre por lo tanto

play07:22

hija tendrá una String nombre un entero

play07:26

edad Pero además tendrá otro String

play07:29

nombre correspondiente a la clase que

play07:31

está heredando entonces realmente esta

play07:34

String representará el nombre de la hija

play07:35

mientras que la String del padre

play07:37

representa el nombre del Padre Entonces

play07:40

ahora tenemos un constructor en la clase

play07:42

hija que recibe tanto la edad como dos

play07:44

strings la steam del padre y la String

play07:46

de la hija entonces lo primero como

play07:48

siempre invocamos al constructor de la

play07:50

clase padre que realmente lo que hacía

play07:52

era guardar en el nombre de la clase

play07:54

padre esa String que recibe como

play07:56

parámetro que será el segundo parámetro

play07:59

que recibe el constructor de la clase

play08:01

hija importante que no lo he dicho antes

play08:03

es que siempre que hagamos un súper

play08:05

respecto a un constructor debe ir como

play08:08

primera instrucción de ese constructor

play08:10

de lo contrario nos dará un error sin

play08:13

embargo no sucede lo mismo cuando

play08:15

accedemos a un atributo o a un método en

play08:18

ese caso sí que lo podemos utilizar

play08:19

cuando queramos como podéis ver en el

play08:21

ejemplo de aquí más abajo bien entonces

play08:23

una vez ha guardado el nombre y Se

play08:25

imprime por pantalla lo que hará será

play08:27

guardar en la instancia de hija en el

play08:29

atributo nombre esa tercera String que

play08:31

recibimos como parámetro y en la

play08:33

variable distanciada pues ese primer

play08:35

atributo que se recibe en el constructor

play08:36

y finalmente de nuevo imprime ese mismo

play08:39

mensaje de antes en este caso lo tenemos

play08:41

igual que antes no pone el nombre de la

play08:43

hija sin embargo luego tenemos un método

play08:46

Mostrar info que realmente tiene el

play08:48

mismo nombre que en la clase padre el

play08:51

nombre es exactamente el mismo y esto es

play08:53

perfectamente válido entonces aquí se

play08:55

debe tener en cuenta que este Mostrar

play08:57

info ejecutará o uno u otro dependiendo

play09:01

del tipo de distancia sobre el que se

play09:02

invoque si tenemos una instancia de tipo

play09:05

hija invocamos a mostrar info sea

play09:09

ejecutará este método de aquí sin

play09:11

embargo si tenemos una distancia de la

play09:13

clase padre se invocará el de arriba y

play09:16

aquí a su vez de hecho Mostrar info

play09:19

accede a el método de la clase padre y

play09:22

lo hace a través del súper entonces lo

play09:24

que hará será en primer lugar hacer este

play09:26

print de Ln y luego invocar a mostrar

play09:28

info que hace otro print en el primero

play09:31

me muestra los datos de la hija y en el

play09:34

segundo me muestra los datos del padre

play09:35

de la hija tiene nada y del padre solo

play09:37

tiene el nombre y bien para que se

play09:39

entienda todo esto mejor pues vamos a

play09:41

ver este mismo ejemplo en visual Studio

play09:43

code para ello vamos a ir a editor y

play09:46

aquí tendríamos las clases como en el

play09:48

primer ejemplo

play09:49

tenemos el padre con el nombre y la hija

play09:52

Únicamente con la edad

play09:54

Entonces si ahora aquí en un Main

play09:56

creamos una instancia de la clase padre

play09:58

por ejemplo padre p = New padre y le

play10:03

pasamos Pepe aquí realmente al

play10:06

ejecutarlo pues me mostrará simplemente

play10:08

el nombre Pepe y ya está sin embargo si

play10:12

en vez de crear una instancia de la

play10:14

clase padre la creamos de la clase hija

play10:17

ponemos h1 igual a New hija pasándole un

play10:22

5 y Pepe ahora de ejecutarlo

play10:27

me mostrará Pepe tiene una hija de 5

play10:29

años

play10:32

bien pero veamos ahora el otro ejemplo

play10:34

ahora tenemos la clase padre con el

play10:36

método Mostrar info y la clase hija

play10:38

también con el método Mostrar info Pero

play10:41

además la clase hija tiene ahora un

play10:43

atributo nombre por lo tanto como hemos

play10:46

dicho antes tendremos un nombre tanto de

play10:49

la hija como un nombre tanto del padre

play10:51

ya que estamos extendiendo de esa clase

play10:54

padre que a su vez tiene una String

play10:56

nombre Entonces si quisiéramos

play10:58

diferenciar el nombre de la instancia

play11:00

del nombre de la clase padre lo haríamos

play11:02

a través del súper entonces veamos en

play11:04

primer lugar un ejemplo creando

play11:06

instancias de la clase hija ahora con

play11:09

estos tres atributos entonces para ello

play11:11

de nuevo en el Main haremos hija h1

play11:14

igual a nihuija fijaros que ahora me

play11:18

pide tres parámetros por ejemplo primero

play11:19

cinco años luego el nombre del padre

play11:22

Pepe y el nombre de la hija Por ejemplo

play11:25

Marta si ahora lo ejecutamos

play11:28

me indica Pepe tiene una hija de 5 años

play11:30

para formar esas String está utilizando

play11:33

tanto el constructor de la clase hija

play11:36

como el constructor de la clase padre lo

play11:39

primero que hace es ir a el súper de

play11:40

Padre pasándole en este caso Pepe

play11:43

Entonces se guarda en la instancia y a

play11:47

continuación se hace un print de ese

play11:48

nombre que sería esta parte de aquí a

play11:52

continuación

play11:52

guarda como variables de distancia el

play11:55

nombre a partir del Tercer parámetro que

play11:57

es hija y la edad y a continuación

play11:59

imprime tiene una hija de concatenado

play12:02

con edad concatenado con años que

play12:04

realmente es esta parte de aquí

play12:07

Y si ahora por ejemplo en h1

play12:10

invoco a mostrar info y ahora lo

play12:13

ejecutamos me muestra esta información

play12:16

de aquí hija Marta coma edad dos puntos

play12:19

cinco años esto realmente invoca el

play12:21

método Mostrar info sobre la instancia

play12:23

h1 por lo tanto como h1 es una instancia

play12:27

de la clase hija Estamos invocando a

play12:29

mostrar info de la clase hija entonces

play12:31

iremos a esta clase

play12:33

y este es el método que se invoca en

play12:35

primer lugar Se imprime la información

play12:37

de la hija sea el nombre luego edad lo

play12:40

concatena con edad y finalmente invoca a

play12:43

mostrar info de la clase padre ya que

play12:46

utiliza el súper Entonces si vamos ahora

play12:48

a clase padre

play12:49

esa segunda línea la muestra este método

play12:52

padre Pepe

play12:55

sin embargo si ahora aquí por ejemplo

play12:57

ponemos una clase padre

play12:59

p1 igual a New padre y le ponemos Tom

play13:04

Ahora sí hago p1 Mostrar info

play13:07

evidentemente invocará el método de la

play13:10

clase padre ya que p1 es una instancia

play13:13

de esa clase si lo ejecutamos aquí

play13:16

fijaros lo que ha pasado en primer lugar

play13:18

este Tom realmente se genera crear este

play13:20

constructor lo a continuación a crear la

play13:23

instancia de hija me imprime todo esto

play13:25

de aquí y finalmente el p1 mostrará info

play13:27

me muestra la info de la instancia p1

play13:30

que es una instancia de la clase padre

play13:33

por lo tanto me muestra este Mostrar

play13:35

info compadre dos puntos y el nombre

play13:39

bien pero hagamos algún ejemplo

play13:40

adicional para que se termine de

play13:42

entender todo esto bien ahora por

play13:43

ejemplo vamos a la clase hija Y en vez

play13:46

de mostrar info de esta forma vamos por

play13:48

ejemplo acceder a el nombre del Padre

play13:50

directamente a través de un atributo

play13:52

podríamos hacerlo de la siguiente forma

play13:54

un sishot Aquí voy a poner padre dos

play13:57

puntos y concatenarlo con súper punto

play14:00

nombre este es súper punto nombre es la

play14:04

forma que tenemos de diferenciar el

play14:06

nombre que tenemos como variable de

play14:09

distancia del nombre que tenemos de la

play14:11

clase padre que sería este de aquí

play14:13

entonces aquí realmente accederé a ese

play14:16

atributo nombre de la clase padre e

play14:19

incluso aquí podríamos tener un tercer

play14:20

atributo que fuera nombre String nombre

play14:23

Entonces ahora realmente esta segunda

play14:25

línea cuando accede a nombre está

play14:28

accediendo al parámetro de hecho ahora

play14:30

cuando invoquemos a mostrar info

play14:33

sobre una instancia de la clase hija

play14:34

vamos a quitar esta de aquí y vamos a

play14:37

poner h1 y Aquí vamos al info le ponemos

play14:40

Tom Ahora cuando lo ejecutemos fijaros

play14:44

que ha sucedido aquí creamos la

play14:45

instancia y me indica que Pepe tiene una

play14:48

hija de 5 años sin embargo luego cuando

play14:51

invocamos a mostrar info genera estas

play14:54

dos líneas pone padre Pepe y luego hija

play14:58

Tom edad 5 años pero realmente la

play15:01

instancia hija el nombre está guardado

play15:03

como Marta pero claro al invocar a

play15:05

mostrar info pasándole un String esa

play15:08

String se le está pasando en la segunda

play15:10

línea después de hija entonces aquí para

play15:13

que acceda realmente al nombre de la

play15:15

instancia de esa hija lo haríamos a

play15:17

través del Dish

play15:18

y aquí por ejemplo podemos utilizar

play15:20

nombre como cabecera por ejemplo aquí

play15:23

podríamos nombre y desde el Main pues

play15:25

podríamos invocarlo Mostrar info y poner

play15:28

pues por ejemplo estos son los datos

play15:30

dos puntos Entonces ahora cuando lo

play15:33

ejecutamos de nuevo esto lo genera el

play15:35

constructor y luego mostraré info es

play15:39

String que le pasamos como parámetro

play15:40

realmente va en la primera línea y luego

play15:43

tenemos padre PP hija Marta edad 5 años

play15:49

y bien nada lo voy a dejar como estaba

play15:50

simplemente era para que vierais este

play15:52

ejemplo entonces quitaremos a String

play15:54

nombre demostrar info quitaremos este

play15:56

print Ln Y llamaremos de nuevo Primero a

play16:00

super punto Mostrar info que mostrará

play16:03

los datos del padre y aquí por ejemplo

play16:05

en vez de poner edad voy a poner tiene y

play16:07

ya está y además voy a quitar los isos

play16:09

de los constructores para que no muestre

play16:11

esa información

play16:14

Entonces ahora cuando la ejecutemos de

play16:16

nuevo

play16:18

el constructor no genera ningún String y

play16:20

Mostrar info pues me muestra padre Pepe

play16:23

hija Marta tiene 5 años

play16:26

y bien nada de momento lo vamos a dejar

play16:28

aquí y en el siguiente vídeo pues

play16:30

veremos algún ejemplo adicional para que

play16:32

se termine de asimilar todo esto mejor

Rate This

5.0 / 5 (0 votes)

الوسوم ذات الصلة
Programación JavaHerenciaPolimorfismoExcepcionesClases AbstractasInterfacesReutilización de CódigoOrientación a ObjetosDesarrollo de SoftwareAprender Java
هل تحتاج إلى تلخيص باللغة الإنجليزية؟