1
00:00:11,560 --> 00:00:18,600
Uso de super en la sobrecarga de constructores vamos a revisar a continuación un ejemplo del uso de

2
00:00:18,600 --> 00:00:24,480
súper dentro de la sobrecarga de constructores partiendo de la clase de persona que analizamos en la

3
00:00:24,480 --> 00:00:31,290
lámina anterior definiremos la clase empleado la cual extiende la clase de persona por lo tanto hereda

4
00:00:31,290 --> 00:00:34,120
todas las características de esta clase de persona.

5
00:00:34,200 --> 00:00:38,040
Sin embargo no hereda las características que son de tipo privado.

6
00:00:38,040 --> 00:00:43,290
Esto quiere decir que la clase empleado tiene acceso al constructor público de la clase persona de dos

7
00:00:43,290 --> 00:00:49,860
argumentos estrechen e int y por lo tanto podemos apoyarnos de este constructor para inicializar los

8
00:00:49,860 --> 00:00:51,890
atributos de la clase persona.

9
00:00:52,050 --> 00:00:58,110
De hecho por la forma en que está construida la clase de persona es la única forma de inicializar los

10
00:00:58,110 --> 00:00:59,730
atributos de dicha clase.

11
00:00:59,730 --> 00:01:06,180
Por ejemplo el atributo Heydi persona de la clase persona no hay forma de acceder directamente ni siquiera

12
00:01:06,210 --> 00:01:08,430
a través de algún método o constructor.

13
00:01:08,430 --> 00:01:13,280
La única forma de acceder inicializar es mandar a llamar el constructor vacío.

14
00:01:13,290 --> 00:01:18,900
Sin embargo este constructor vació de la clase persona es privado por lo tanto no podemos usarlo desde

15
00:01:18,900 --> 00:01:20,510
la clase empleado.

16
00:01:20,610 --> 00:01:25,890
La única forma que tenemos de inicializar el objeto persona es a través de la llamada al constructor

17
00:01:25,890 --> 00:01:30,630
público con dos argumentos de tipo string e int.

18
00:01:30,630 --> 00:01:34,700
Ahora la pregunta es cómo podemos acceder a este constructor.

19
00:01:34,710 --> 00:01:37,640
La respuesta es utilizando la palabra super.

20
00:01:37,710 --> 00:01:43,650
Recordemos que la palabra super lo que hace es mandar a llamar a algún método o atributo de la clase

21
00:01:43,650 --> 00:01:44,330
padre.

22
00:01:44,400 --> 00:01:50,490
Sin embargo en este caso si utilizamos la sintaxis Supper y entre paréntesis indicamos cuál es el constructor

23
00:01:50,490 --> 00:01:52,290
que queremos mandar a llamar.

24
00:01:52,290 --> 00:01:59,090
En este caso proporcionamos dos argumentos nombre y edad para mandar a llamar el constructor de la clase

25
00:01:59,100 --> 00:02:05,370
persona que es público pero no podemos mandar a llamar un constructor privado así que no podríamos utilizar

26
00:02:05,370 --> 00:02:12,890
la línea de Super y entre paréntesis punto y coma es decir la llamada al constructor vacío.

27
00:02:12,890 --> 00:02:18,440
Esto no es posible ya que este constructor dentro de la clase persona es privado pero sí podemos mandar

28
00:02:18,440 --> 00:02:22,790
a llamar el constructor público proporcionando los argumentos respectivos.

29
00:02:22,850 --> 00:02:28,520
Así que para el ejemplo que estamos mostrando la palabra super la estamos usando para inicializar los

30
00:02:28,520 --> 00:02:35,510
atributos de la clase persona de la cual extiende empleado si no lo hiciéramos de esta forma estaríamos

31
00:02:35,510 --> 00:02:41,960
dejando sin asignar los valores respectivos a los atributos de la clase persona ya que todos sus atributos

32
00:02:41,960 --> 00:02:49,040
son privados podríamos asignar valores si existieran métodos tipo teitos es decir métodos C.T para los

33
00:02:49,040 --> 00:02:55,190
atributos respectivos pero en este caso no existen este tipo de métodos por lo que los atributos se

34
00:02:55,190 --> 00:03:01,670
quedarían sin inicializar así que este es un ejemplo de cómo podemos empezar a configurar nuestras clases

35
00:03:01,940 --> 00:03:07,790
para que al momento de crear nuestros objetos empecemos a poner restricciones sobre cómo se deben utilizar

36
00:03:07,980 --> 00:03:15,790
e inicializar sus atributos finalmente podemos observar que cada clase realiza su labor es decir la

37
00:03:15,790 --> 00:03:22,150
clase persona realiza las tareas respectivas al momento de crear un objeto de tipo personal pero también

38
00:03:22,150 --> 00:03:28,660
podemos observar cómo en las clases hijas pueden realizar sus tareas para inicializar sus propios atributos

39
00:03:29,440 --> 00:03:34,300
así que una vez que hemos terminado de mandar a llamar el constructor de la clase padre el siguiente

40
00:03:34,300 --> 00:03:41,470
paso es terminar de inicializar los atributos de esta clase empleado y de esta manera es que podemos

41
00:03:41,470 --> 00:03:46,150
ya tener completamente configurado nuestro objeto de tipo empleado.

42
00:03:46,150 --> 00:03:53,140
Así evitamos duplicar código y cada una de las clases realiza únicamente la tarea que debe realizar.

43
00:03:53,140 --> 00:03:59,230
Por ello es que delegamos cualquier tarea a la clase padre a los constructores correspondientes y de

44
00:03:59,230 --> 00:04:05,170
esta manera evitamos la duplicación de código y comenzamos a crear diseños más elaborados y funcionales

45
00:04:05,440 --> 00:04:08,050
en la creación y codificación de nuestras clases.

46
00:04:11,600 --> 00:04:17,220
Orden de llamada de constructores con lo que hemos visto hasta ahora podemos darnos cuenta no solamente

47
00:04:17,220 --> 00:04:23,590
de cómo se configuran nuestras clases Java sino también el orden en que se crean los objetos en primer

48
00:04:23,590 --> 00:04:29,540
lugar se manda llamar el constructor del objeto que estamos creando por ejemplo vamos a revisar el siguiente

49
00:04:29,540 --> 00:04:38,150
código cuando estamos creando el objeto empleado proporcionamos el nombre la edad y el sueldo y posteriormente

50
00:04:38,150 --> 00:04:40,370
mandamos a imprimir el objeto.

51
00:04:40,370 --> 00:04:46,670
Este objeto que se está creando no solamente incluye valores de la clase empleado sino que hereda de

52
00:04:46,670 --> 00:04:51,220
la clase persona y a su vez la clase de persona hereda de la clase obvie.

53
00:04:51,380 --> 00:04:57,830
Así que para ver un objeto de tipo empleado tendríamos que entender que estamos configurando un objeto

54
00:04:57,830 --> 00:05:01,590
más grande que simplemente los atributos de la clase empleado.

55
00:05:01,610 --> 00:05:07,160
Por ello es que mostramos esta figura y ahora veamos el orden en que se mandan a llamar los constructores

56
00:05:07,400 --> 00:05:14,640
para crear este objeto de tipo empleado en primer lugar se manda llamar el constructor del objeto que

57
00:05:14,640 --> 00:05:21,660
estamos creando en este caso la clase empleado al comenzar a ejecutar este constructor de la clase empleado

58
00:05:21,960 --> 00:05:29,780
se hace una llamada implícita a super de la clase padre si es que no hemos proporcionado otra sintaxis

59
00:05:30,140 --> 00:05:37,070
se hace una llamada al constructor vació de la clase padre así que de manera implícita de manera automática

60
00:05:37,700 --> 00:05:44,570
lo primero que se hace es mandar a llamar a super sin argumentos es decir al constructor vació de la

61
00:05:44,570 --> 00:05:48,710
clase padre todas las clases en Java heredan de la clase Object.

62
00:05:48,980 --> 00:05:55,040
Según hemos comentado por lo tanto todos los constructores en un momento determinado hacen una llamada

63
00:05:55,100 --> 00:06:02,690
a Súper de la clase Object así que eventualmente haremos la llamada al constructor vació de la clase

64
00:06:02,750 --> 00:06:08,600
Object por medio de la llamada a Super entre paréntesis sin argumentos para que se pueda ejecutar la

65
00:06:08,600 --> 00:06:15,590
llamada al constructor vació de la clase obvie este constructor es el encargado de reservar memoria

66
00:06:15,590 --> 00:06:18,550
de manera dinámica entre varias tareas más.

67
00:06:18,590 --> 00:06:24,440
Sin embargo para esta lección basta con saber que el constructor se manda a llamar en todos los casos

68
00:06:24,440 --> 00:06:30,330
que se crea un objeto una vez que termina de ejecutarse el constructor de la clase padre se regresa

69
00:06:30,420 --> 00:06:37,830
el control al constructor que había iniciado la llamada o que a su vez es el constructor padre y así

70
00:06:37,890 --> 00:06:40,950
hasta que la cadena de constructores se concluya.

71
00:06:40,950 --> 00:06:47,040
Así que podemos observar que una vez que se termina de crear el objeto de la clase padre en este caso

72
00:06:47,040 --> 00:06:49,800
la clase Object comienza de nueva cuenta.

73
00:06:49,860 --> 00:06:55,030
De regreso hacia las clases hijas que hicieron la llamada a este constructor padre.

74
00:06:55,320 --> 00:07:01,470
Así que la clase padre de la clase de persona fue la clase obvien y una vez que termina de ejecutarse

75
00:07:01,560 --> 00:07:07,440
este constructor de la clase padre se regresa el control a la clase hija en este caso a la clase de

76
00:07:07,440 --> 00:07:12,030
persona y este proceso se continúa con la siguiente clase.

77
00:07:12,030 --> 00:07:18,840
En este caso una vez que termina de ejecutarse el código del constructor de la clase de persona se regresa

78
00:07:18,870 --> 00:07:26,030
el control a la clase e hija que hizo la llamada en este caso a la clase empleado y así sucesivamente.

79
00:07:26,060 --> 00:07:32,930
Si tuviéramos una jerarquía más larga de clases este sería el orden de llamada de constructores así

80
00:07:32,930 --> 00:07:38,600
que una vez que el constructor vació de la clase padre termina de ejecutarse se regresa el control al

81
00:07:38,600 --> 00:07:44,270
constructor de la clase e hija que hizo la llamada y continúa con la ejecución de su código.

82
00:07:44,390 --> 00:07:49,730
Si ya se concluyó con la llamada de constructores entonces se regresa el control al método que hizo

83
00:07:49,730 --> 00:07:56,480
la llamada a la construcción del objeto respectivo por ejemplo en nuestro código el método main es quien

84
00:07:56,480 --> 00:08:03,020
crea un objeto de la clase empleado pero éste a su vez tiene como clase padre a la clase persona y la

85
00:08:03,020 --> 00:08:09,260
clase persona a ya no extender de ninguna otra clase de manera explícita entonces extiende de manera

86
00:08:09,320 --> 00:08:15,560
implícita de la clase obvie todas las clases en Java si no especifican una extensa en la definición

87
00:08:15,560 --> 00:08:19,880
de su clase podemos decir que su clase padre es la clase Object.

88
00:08:19,880 --> 00:08:26,630
Según hemos comentado por lo tanto la primera llamada que se realiza es al constructor de la clase empleado

89
00:08:27,410 --> 00:08:34,300
y posteriormente se manda a llamar los constructores de la clase de persona y obvia respectivamente.

90
00:08:34,430 --> 00:08:41,210
Sin embargo si recordamos el Código de la lámina anterior recordamos que la clase empleado si hace una

91
00:08:41,210 --> 00:08:49,040
llamada implícita de super esto para mandar a llamar el constructor de la clase persona con dos argumentos

92
00:08:49,250 --> 00:08:58,460
según recordamos de tipo String int para proporcionar el nombre y la edad de la persona entonces antes

93
00:08:58,460 --> 00:09:05,060
de hacer la asignación del atributo sueldo de la clase empleado lo primero que hace es hacer una llamada

94
00:09:05,120 --> 00:09:11,420
al constructor de la clase padre es decir al constructor de la clase persona debido a que si se está

95
00:09:11,420 --> 00:09:17,300
haciendo una llamada explícita por medio de super entonces se manda a llamar al constructor de la clase

96
00:09:17,300 --> 00:09:23,840
persona con dos argumentos este constructor de la clase persona con dos argumentos supondremos que es

97
00:09:23,840 --> 00:09:26,690
el mismo código de las láminas anteriores.

98
00:09:26,690 --> 00:09:33,230
Por lo tanto se hace una llamada al constructor sin argumentos con el uso de Diz y este constructor

99
00:09:33,230 --> 00:09:39,920
sin argumentos debido a que no hace una llamada explícita a Supper entonces de manera implícita manda

100
00:09:39,920 --> 00:09:46,690
llamar a Súper de la clase obvie una vez que termina este constructor de la clase Object de ejecutarse

101
00:09:46,990 --> 00:09:53,450
regresa el control al constructor vació de la clase persona y continúa con la línea siguiente donde

102
00:09:53,470 --> 00:10:00,400
se hizo la llamada implícita a Super y continúa una línea después de donde se hizo la llamada a Super

103
00:10:00,700 --> 00:10:03,930
ya sea de manera implícita o explícita.

104
00:10:04,000 --> 00:10:09,550
Por ello es que la palabra super debe de ser la primera línea que debe de encontrarse en un constructor

105
00:10:09,640 --> 00:10:15,940
si es que existe ya que posteriormente de la llamada a Super es que se regresa el control a este constructor

106
00:10:16,180 --> 00:10:23,010
y termina de ejecutar las siguientes líneas una vez que termina la ejecución de los códigos de los constructores

107
00:10:23,010 --> 00:10:29,640
de la clase personan regresa el control al constructor de la clase empleado para finalmente concluir

108
00:10:29,790 --> 00:10:36,930
con la creación del objeto empleado el cual ya ha inicializar todos los atributos tanto de la clase

109
00:10:36,960 --> 00:10:42,300
empleado y de la clase de persona según el proceso descrito anteriormente.

110
00:10:42,300 --> 00:10:48,270
El orden de llamada de constructores es importante tenerlo en cuenta ya que cuando estamos programando

111
00:10:48,270 --> 00:10:54,570
nuestros constructores y considerando la inicialización de variables es importante saber el orden en

112
00:10:54,570 --> 00:11:00,750
el que nuestros constructores serán ejecutados así como la creación de los objetos sobre todo cuando

113
00:11:00,750 --> 00:11:03,340
estamos aplicando el concepto de herencia.

114
00:11:03,390 --> 00:11:08,910
A continuación vamos a realizar un ejercicio para poner en práctica el concepto de sobrecarga de constructores

115
00:11:08,940 --> 00:11:09,480
en Java.
