1
00:00:00,150 --> 00:00:00,810
Bien, sigamos.

2
00:00:00,870 --> 00:00:05,910
Vamos a ver algunas características importantes de las interfaces, pero que son de la versión de Java

3
00:00:06,000 --> 00:00:07,950
8 implementadas en ya 8.

4
00:00:08,060 --> 00:00:13,860
Básicamente son dos características, una solo métodos default que podemos implementar en una interfaz

5
00:00:13,950 --> 00:00:15,270
y también métodos estáticos.

6
00:00:15,340 --> 00:00:19,620
Bien, había mencionado que las interfaces no puede tener métodos implementado.

7
00:00:19,710 --> 00:00:27,450
Bueno, eso es en esencia y en el más puro y cristalino estado de una interfaz implementación que básicamente

8
00:00:27,600 --> 00:00:29,820
es un protocolo método sin implementar.

9
00:00:29,910 --> 00:00:35,340
Entonces, cuando hablamos de atracción pura es eso comportamiento y no debería tener menos implementado.

10
00:00:35,400 --> 00:00:37,080
Pero no a carácterísticas.

11
00:00:37,140 --> 00:00:43,380
Podemos tener métodos implementados por default, pero más que dar una implementación por defecto,

12
00:00:43,500 --> 00:00:48,390
un comportamiento es para que las clases hijas no estén obligada a implementar todos los métodos.

13
00:00:48,390 --> 00:00:48,870
La interfaz.

14
00:00:48,930 --> 00:00:54,960
Claro, porque una interfaz podría tener muchos métodos y obligaría obliga a cada clase hija concreta

15
00:00:55,050 --> 00:00:56,250
a implementar estos métodos.

16
00:00:56,280 --> 00:01:02,340
Puede que algunos sean obligatorios y otros no. Cuando son obligatorio, bueno, son la firma tal como

17
00:01:02,340 --> 00:01:07,470
lo tenemos acá sin cuerpo, pero también podríamos tener alguno que no sean obligatorio y poder tener

18
00:01:07,530 --> 00:01:09,330
una implementación default.

19
00:01:09,450 --> 00:01:10,380
Veamos el ejemplo.

20
00:01:10,470 --> 00:01:11,070
Mucho mejor.

21
00:01:11,310 --> 00:01:12,450
Voy a modificar este método.

22
00:01:12,690 --> 00:01:15,450
Entonces vamos a hacer ahora que este método sea default.

23
00:01:15,540 --> 00:01:22,350
Entonces, con el modificador default default, simplemente sin el public no necesario, sigue siendo

24
00:01:22,350 --> 00:01:22,950
público.

25
00:01:23,400 --> 00:01:27,480
Y acá colocamos un cuerpo, quitamos el punto y coma y las llaves.

26
00:01:27,840 --> 00:01:29,130
Y ahí tenemos una implementación.

27
00:01:29,280 --> 00:01:30,690
Por ejemplo return,

28
00:01:34,830 --> 00:01:36,840
imprimiendo valor por defecto y listo.

29
00:01:36,930 --> 00:01:39,090
Ahí tenemos el método interfaz default.

30
00:01:39,330 --> 00:01:43,110
De esta forma ya, por ejemplo, las clases hijas como cualquiera.

31
00:01:43,230 --> 00:01:45,870
Vamos a colocar el libro, da lo mismo.

32
00:01:46,530 --> 00:01:49,800
No estaría obligado a implementar este método de la interfaz.

33
00:01:50,130 --> 00:01:51,810
Incluso lo podríamos comentar.

34
00:01:53,430 --> 00:01:54,960
Se fijen y no marca error.

35
00:01:55,440 --> 00:01:56,100
Por qué?

36
00:01:56,190 --> 00:01:57,580
Porque es default.

37
00:01:57,780 --> 00:02:00,240
Ya tienen implementación en la interfaz por defecto.

38
00:02:00,660 --> 00:02:06,300
Básicamente para dar una compatibilidad a la clase concretas y que éstas no estén obligada a implementar

39
00:02:06,300 --> 00:02:06,810
este método.

40
00:02:06,900 --> 00:02:10,920
Pero insisto, solamente lo aplicamos cuando el método sea opcional.

41
00:02:11,040 --> 00:02:13,890
Es decir, no sea realmente requerido que la clase cija lo implementen.

42
00:02:13,980 --> 00:02:18,750
Ahora, si realmente requerido con una implementación propia en cada una diferente.

43
00:02:18,840 --> 00:02:21,910
Hoy no. Hoy lo dejamos como lo teníamos, sin el default.

44
00:02:22,650 --> 00:02:27,630
Entonces, para repasar, se quitó el default y lo dejamos sin el cuerpo con el punto y coma.

45
00:02:28,080 --> 00:02:33,540
Mark No acepto porque livro esta obliga a implementar el método, ya que lo tengo comentado.

46
00:02:33,960 --> 00:02:36,000
Si lo implementamos no da error.

47
00:02:37,930 --> 00:02:40,030
Vuelvo atrás, voy a comentar.

48
00:02:40,450 --> 00:02:40,960
Se fijen.

49
00:02:41,050 --> 00:02:42,550
Entonces ahora dale error.

50
00:02:43,420 --> 00:02:47,020
Nos vamos a imprimible y lo dejamos en ti, Follet.

51
00:02:47,170 --> 00:02:48,040
Y ya no da error.

52
00:02:48,340 --> 00:02:49,120
Ya no está obligada.

53
00:02:49,210 --> 00:02:49,690
Se fija.

54
00:02:50,080 --> 00:02:53,800
Ahora, si levantamos nos vamos a ejemplo.

55
00:02:53,800 --> 00:02:55,000
Imprenta por acá.

56
00:02:55,930 --> 00:02:56,410
Rahn.

57
00:02:58,220 --> 00:03:00,440
El libro imprimiendo un valor por defecto.

58
00:03:00,860 --> 00:03:05,480
Eso se va a imprimir, se fijan en vez de imprimir toda la implementación LIER Ya que no lo estamos

59
00:03:05,600 --> 00:03:11,960
criando, no lo estamos reemplazando ahora, obviamente si libro da su propia implementación con el

60
00:03:12,020 --> 00:03:12,600
all right.

61
00:03:12,770 --> 00:03:14,960
Y todo esto si escribimos el método.

62
00:03:16,460 --> 00:03:17,530
Nos vamos a ejemplo.

63
00:03:20,450 --> 00:03:23,030
Ahora se imprime el libro con su implementación propia.

64
00:03:23,120 --> 00:03:26,900
Se fijan entonces bueno, solamente para dar una implementación por defecto.

65
00:03:27,020 --> 00:03:29,180
Ahora, qué pasa, por ejemplo, con Curriculo?

66
00:03:29,660 --> 00:03:30,260
Vamos a ver.

67
00:03:31,500 --> 00:03:33,090
O con informe da lo mismo.

68
00:03:33,810 --> 00:03:34,860
Voy a comentar acá.

69
00:03:38,890 --> 00:03:39,880
Bueno, de error.

70
00:03:40,180 --> 00:03:44,260
Por qué da error si tenemos una implementación por defecto en la interfaz?

71
00:03:44,560 --> 00:03:49,750
Bueno, por la clase abstracta, te digan, porque la clase abstracta también tiene el método abstracto

72
00:03:49,930 --> 00:03:54,940
imprimir y la clase abstracta hola es la que está obligando a imprimir el método, se fijan, pero no

73
00:03:54,940 --> 00:03:55,560
la interfaz.

74
00:03:55,690 --> 00:03:57,790
Entonces ya es un tema de la clase abstracta.

75
00:03:58,270 --> 00:03:59,680
De hecho, si lo comentábamos.

76
00:04:00,710 --> 00:04:01,950
Volvemos al currículum.

77
00:04:02,120 --> 00:04:08,420
Ya no da error, pero no la idea solamente para demostrar, entonces es la clase tracta la responsable

78
00:04:08,510 --> 00:04:10,010
del error y no la interfaz.

79
00:04:10,590 --> 00:04:13,880
Entonces, ahora precontrato de la clase padre Hola.

80
00:04:14,090 --> 00:04:19,940
Es decir, currículum está obligada sí o sí a implementar siempre el método imprimir independiente,

81
00:04:19,940 --> 00:04:22,160
si es difícil o no en interfaz.

82
00:04:26,590 --> 00:04:33,130
Perfecto, entonces, para el ejemplo volvemos a interfaz, lo podemos dejar así o como estaba antes.

83
00:04:33,280 --> 00:04:33,850
Da lo mismo.

84
00:04:34,330 --> 00:04:37,570
Lo importante era ver este tema, que podemos tener métodos de fold.

85
00:04:37,780 --> 00:04:43,030
Pero si también podemos tener métodos estáticos, muy parecido con static, igual que un método estático

86
00:04:43,030 --> 00:04:44,380
en una clase, pero sin el public.

87
00:04:44,500 --> 00:04:48,870
El public no es obligación y por defecto público todos usamos static.

88
00:04:49,000 --> 00:04:54,460
Igual tiene sentido porque recuerden que el método estático static le pertenecen a la clase, no a la

89
00:04:54,460 --> 00:04:55,020
instancia.

90
00:04:55,150 --> 00:05:00,670
Y no podemos tener una instancia, una referencia de una interfaz, pero sí podríamos tener un método

91
00:05:00,670 --> 00:05:03,490
estático de la interfaz que le pertenezca a la interfaz.

92
00:05:03,610 --> 00:05:08,350
Obviamente no lo objeto, pero sí la interfaz que podemos utilizar este método estático a través de

93
00:05:08,350 --> 00:05:08,950
la interfaz.

94
00:05:09,220 --> 00:05:14,950
Bueno, un ejemplo sencillo incluso mira, vamos a ir a ejemplo imprenta.

95
00:05:15,520 --> 00:05:17,380
Acá tenemos un método estático, se fijan?

96
00:05:17,470 --> 00:05:23,860
Lo voy a cortar tal cual para el ejemplo, nada más lo voy a cortar de la clase con el método main ejemplo

97
00:05:24,070 --> 00:05:26,260
prenta y lo voy a pegar acá.

98
00:05:27,340 --> 00:05:27,740
Perfecto.

99
00:05:27,870 --> 00:05:28,900
Fija no da error.

100
00:05:29,020 --> 00:05:30,370
Está bien el public.

101
00:05:30,380 --> 00:05:31,900
De hecho, lo podríamos quitar.

102
00:05:32,410 --> 00:05:35,680
Podría ser vey o podría retornar algún tipo de dato.

103
00:05:35,740 --> 00:05:37,690
Da lo mismo, pero tiene que ser estático.

104
00:05:39,170 --> 00:05:42,620
Método propio que le pertenecen al interfaz.

105
00:05:42,740 --> 00:05:44,600
Entonces ahora en ejemplo.

106
00:05:46,000 --> 00:05:51,730
Usamos imprimir a través del nombre el interfaz imprimible punto.

107
00:05:59,020 --> 00:05:59,470
DC.

108
00:06:01,860 --> 00:06:03,060
De ahí no hay ningún error.

109
00:06:03,320 --> 00:06:06,840
Entonces la interfaz tiene un método default, pero también métodos estáticos.

110
00:06:08,310 --> 00:06:09,300
Déjalo, utilizamos.

111
00:06:12,810 --> 00:06:14,310
Se fijan, funciona perfecto.

112
00:06:14,520 --> 00:06:17,460
Incluso podríamos importar imprimible.

113
00:06:18,620 --> 00:06:19,460
De forma estática.

114
00:06:20,690 --> 00:06:22,600
Import static.

115
00:06:23,580 --> 00:06:28,040
Org punto A. Guzmán Bueno, imprenta modelo.

116
00:06:28,190 --> 00:06:29,870
Buscamos la interfaz imprimible.

117
00:06:29,960 --> 00:06:30,800
Ahí la tenemos.

118
00:06:30,920 --> 00:06:33,080
Punto el método imprimir.

119
00:06:33,140 --> 00:06:33,770
Punto y coma.

120
00:06:34,520 --> 00:06:36,140
Es decir, importamos el método estático.

121
00:06:36,230 --> 00:06:36,740
Imprimir.

122
00:06:37,490 --> 00:06:39,680
Bajamos y acá ya la podemos quitar.

123
00:06:41,730 --> 00:06:46,590
Entonces queda como si fuera un método estático de la clase, pero en realidad es la interfaz, pero

124
00:06:46,590 --> 00:06:47,340
lo importamos.

125
00:06:52,950 --> 00:06:55,410
Qué otra característica de las interfaces?

126
00:06:55,500 --> 00:06:59,070
Bueno, también puede tener atributos que sean constantes.

127
00:06:59,160 --> 00:07:07,110
Es decir, final y estática, por ejemplo public final static.

128
00:07:07,560 --> 00:07:11,550
Bueno, incluso el public se puede omitir, ya que es redundante, igual que los métodos.

129
00:07:11,640 --> 00:07:14,490
Entonces simplemente final static del tipo.

130
00:07:14,760 --> 00:07:17,640
Por ejemplo, es trinco una constante tipo string.

131
00:07:18,660 --> 00:07:21,600
Por ejemplo, texto en mayúscula defecto.

132
00:07:22,200 --> 00:07:24,840
Igual voy a cortar esto.

133
00:07:26,020 --> 00:07:28,510
Y lo dejamos acá, algunos bastante cualquiera.

134
00:07:28,630 --> 00:07:33,010
Y acá retornamos la constante texto de efecto.

135
00:07:33,100 --> 00:07:33,580
Se fijan?

136
00:07:34,270 --> 00:07:39,880
Puede tener una constante, incluso este constante bueno, la estamos utilizando acá, pero también

137
00:07:39,880 --> 00:07:41,020
la podemos utilizar afuera.

138
00:07:42,350 --> 00:07:47,810
Por ejemplo, acá shout imprimible, punto.

139
00:07:48,140 --> 00:07:48,860
La constante.

140
00:07:49,040 --> 00:07:51,070
Acá tenemos el método estático imprimir.

141
00:07:51,650 --> 00:07:53,960
Lo estamos invocando de forma estática acá.

142
00:07:54,050 --> 00:07:56,300
Y también el texto de efecto.

143
00:08:02,740 --> 00:08:04,040
Imprimiendo un valor por defecto.

144
00:08:05,190 --> 00:08:07,260
Lo mismo también se puede importar.

145
00:08:08,670 --> 00:08:10,800
Ya sea de forma separada.

146
00:08:11,040 --> 00:08:15,300
Poco, pero esto lo pegamos acá hoy día la constante.

147
00:08:16,980 --> 00:08:18,360
Entonces ya puedo quitar esto.

148
00:08:21,040 --> 00:08:28,060
O bien, como estamos importando de forma estática dos elementos, dos miembros el método imprimir y

149
00:08:28,060 --> 00:08:30,580
texto de efecto asterisco también.

150
00:08:39,270 --> 00:08:42,000
Te tenemos imprimiendo un valor por defecto, una constante.

151
00:08:42,920 --> 00:08:46,100
Bueno, son características de las interfaces.

152
00:08:46,340 --> 00:08:52,370
Lo que sí, cuando tenemos un método de default, en este caso deja nuestro diseño más débil en el sentido

153
00:08:52,370 --> 00:08:57,080
de que no aplica la abstracción pura, lo deja más liviano, más flexible.

154
00:08:57,200 --> 00:09:02,360
En el fondo, ese que lo pueda o no imprimir da lo mismo, porque tiene una implementación por defecto

155
00:09:02,360 --> 00:09:03,470
en la interfaz algun@.

156
00:09:03,590 --> 00:09:07,370
En este caso contexto, pero sí en el caso de la impresora imprimible.

157
00:09:07,460 --> 00:09:12,470
Quizás lo ideal sería que no fuera alta, es decir, que ha obligado a implementar este método, ya

158
00:09:12,470 --> 00:09:15,830
que cada uno lo tienen que implementar de forma propia, de forma distinta.

159
00:09:15,950 --> 00:09:20,360
Pero es bien, lo quiero dejar así solamente para el ejemplo, para que vean que puede ser o que podemos

160
00:09:20,360 --> 00:09:23,570
tener un método de fold y también estático.

161
00:09:23,930 --> 00:09:30,710
Bueno, eso quería explicar a otro tan importante que acá incluso nos dice que final static es redundante

162
00:09:30,740 --> 00:09:35,660
para atributos o Campora interfaces, incluso lo podemos dejar así más simple.

163
00:09:36,290 --> 00:09:42,590
Se fijan String y el tipo y por defecto ya es final y static se fijan.

164
00:09:42,740 --> 00:09:50,000
Es redundante, claro, porque una interfaz solamente puede tener atributos, solamente que sean finales

165
00:09:50,090 --> 00:09:50,780
y estáticos.

166
00:09:50,870 --> 00:09:53,030
Obviamente porque no es un objeto, no es una instancia.

167
00:09:53,180 --> 00:09:53,930
Y hasta terminar.

168
00:09:53,930 --> 00:09:55,490
Quería ver también otro ejemplo.

169
00:09:55,980 --> 00:09:56,930
Vámonos acá.

170
00:09:57,020 --> 00:09:58,340
Ejemplo imprenta.

171
00:09:58,430 --> 00:10:05,390
Voy a crear una instancia de imprimible, pero esta instancia se de una clase anónima que voy a crear

172
00:10:05,450 --> 00:10:05,900
al vuelo.

173
00:10:06,050 --> 00:10:08,330
Se acuerdan de clase anónima que vimos en la clase?

174
00:10:08,330 --> 00:10:08,990
Es abstracta.

175
00:10:09,080 --> 00:10:16,910
Bueno, acá también se puede implementar, por ejemplo imprimir new imprimible.

176
00:10:17,450 --> 00:10:20,600
Voy a crear una clase anónima al vuelo de imprimible.

177
00:10:21,140 --> 00:10:29,930
Incluso acá me lo autocompletar imprimible, aunque también puedo hacer a mano los paréntesis y las

178
00:10:29,930 --> 00:10:31,130
llaves se fijan.

179
00:10:31,340 --> 00:10:31,970
Ahí tenemos.

180
00:10:32,060 --> 00:10:36,920
Acá implementamos una clase anónima que implementa la interfaz imprimible al vuelo, ya que podemos

181
00:10:36,920 --> 00:10:42,380
crear clases anónimas a partir de componentes abstracto, ya sea una clase abstracta, una interfaz

182
00:10:42,470 --> 00:10:43,520
y la implementa al vuelo.

183
00:10:43,640 --> 00:10:49,070
Acá podríamos sobrescribir los métodos, por ejemplo el imprimir que el default de hecho como default

184
00:10:49,190 --> 00:10:50,390
no da error, no cierto.

185
00:10:50,480 --> 00:10:53,030
Acá no da error porque lo podemos utilizar.

186
00:10:54,120 --> 00:10:56,190
Pero qué pasa si no fuera alto?

187
00:10:56,380 --> 00:11:00,220
Bueno, estaríamos obligados, esto solamente para el ejemplo, nada más.

188
00:11:00,720 --> 00:11:02,670
Estaríamos obligado a implementar este método acá.

189
00:11:02,820 --> 00:11:03,300
Se fijan?

190
00:11:03,360 --> 00:11:05,900
Daría error y lo tengo que implementar.

191
00:11:07,360 --> 00:11:10,840
Acá y darles la propia forma para imprimir, se fijan.

192
00:11:10,870 --> 00:11:17,700
Pero como difficult no es necesario, lo deja como estaba de fold se fijan, no necesario.

193
00:11:18,040 --> 00:11:18,970
Entonces imprimo esto.

194
00:11:19,000 --> 00:11:22,660
Quiero imprimir el texto por defecto si lo ejecutamos.

195
00:11:25,010 --> 00:11:30,000
Imprimiendo el texto por defecto, se imprimió dos veces porque se imprime acá y se imprime acá.

196
00:11:30,670 --> 00:11:33,080
Acá implementé la interfaz al vuelo.

197
00:11:33,530 --> 00:11:40,950
Pero también podríamos crear una instancia de imprimible objeto imprimible.

198
00:11:41,030 --> 00:11:41,600
Da lo mismo.

199
00:11:41,660 --> 00:11:44,510
Igual esto y acá.

200
00:11:44,570 --> 00:11:45,290
Punto y coma.

201
00:11:46,880 --> 00:11:50,710
Ya pasó esto, el objeto en primicia sería lo mismo.

202
00:11:57,440 --> 00:12:01,360
Incluso podría sobrescribir el método por acá Gene doit o de right.

203
00:12:02,690 --> 00:12:03,830
Imprimir OK.

204
00:12:15,440 --> 00:12:18,860
FICAN Hola, que tal imprimiendo un objeto genérico de una clase anónima?

205
00:12:20,160 --> 00:12:20,640
Veamos.

206
00:12:23,870 --> 00:12:29,390
Hola, que tal imprimiendo un Egipto genérico de la clase anónima, pero también puede crear un objeto,

207
00:12:29,390 --> 00:12:35,660
una variable o también esto mismo lo paso por argumento, si es final es lo mismo, creó el objeto.

208
00:12:35,760 --> 00:12:39,280
Acá lo tenemos o bien corto esto y lo pegamos acá.

209
00:12:40,100 --> 00:12:45,500
Exactamente lo mismo se fijan acá lo tenemos completamente al vuelo.

210
00:12:49,300 --> 00:12:51,340
Bien, lo voy a dejar así esto acá.

211
00:12:51,430 --> 00:12:52,180
Lo de quitar.

212
00:12:53,910 --> 00:12:58,500
Pero recuerden, esto no se puede reutilizar solamente si lo vamos a implementar una sola vez en alguna

213
00:12:58,500 --> 00:12:59,910
clase puntual y listo.

214
00:13:00,000 --> 00:13:00,510
Nada más.

215
00:13:00,660 --> 00:13:04,740
Ahora sé que si terminamos y continuamos en las siguientes clases.
