1 00:00:00,050 --> 00:00:01,209 y situarnos 2 00:00:01,209 --> 00:00:04,410 bueno pues 3 00:00:04,410 --> 00:00:06,169 recordad que esto de la herencia 4 00:00:06,169 --> 00:00:07,889 era simplemente 5 00:00:07,889 --> 00:00:10,810 una relación 6 00:00:10,810 --> 00:00:12,650 que se podía establecer entre dos 7 00:00:12,650 --> 00:00:14,589 entidades cuando una 8 00:00:14,589 --> 00:00:16,890 es un caso particular de la otra 9 00:00:16,890 --> 00:00:18,609 entonces 10 00:00:18,609 --> 00:00:20,809 si identificamos esa relación 11 00:00:20,809 --> 00:00:22,410 de herencia entre dos entidades 12 00:00:22,410 --> 00:00:24,750 eso si queremos 13 00:00:24,750 --> 00:00:26,870 puede tener implicaciones en nuestro 14 00:00:26,870 --> 00:00:27,289 código 15 00:00:27,289 --> 00:00:30,769 podemos ignorar todas las relaciones 16 00:00:30,769 --> 00:00:33,350 pero si ignoramos todas las relaciones 17 00:00:33,350 --> 00:00:36,490 las aplicaciones van a quedar infinitamente más complicadas 18 00:00:36,490 --> 00:00:39,070 de desarrollar, entonces si no las ignoramos 19 00:00:39,070 --> 00:00:42,369 la aplicación va a quedar un poquito más manejable 20 00:00:42,369 --> 00:00:45,369 entonces la relación de herencia es la relación en la cual 21 00:00:45,369 --> 00:00:48,289 identificamos que una entidad es un caso particular de otro 22 00:00:48,289 --> 00:00:51,630 y en ese caso a la hora de programarlo 23 00:00:51,630 --> 00:00:53,770 lo que hacíamos era 24 00:00:53,770 --> 00:00:55,850 pues poner el extends 25 00:00:55,850 --> 00:00:59,670 y ya sabemos lo que significa entonces 26 00:00:59,670 --> 00:01:01,609 que todo lo que 27 00:01:01,609 --> 00:01:04,090 está en cliente, tanto propiedades 28 00:01:04,090 --> 00:01:05,269 como métodos 29 00:01:05,269 --> 00:01:07,510 automáticamente aparece 30 00:01:07,510 --> 00:01:09,629 en un copia y pega en esta 31 00:01:09,629 --> 00:01:11,450 otra, aparece en un copia y pega 32 00:01:11,450 --> 00:01:13,409 sin que hagamos nada, constructores no 33 00:01:13,409 --> 00:01:15,469 ahora los incorporamos, los constructores no 34 00:01:15,469 --> 00:01:16,689 aparece como un copia y pega 35 00:01:16,689 --> 00:01:19,510 bueno, entonces es una manera de reutilizar 36 00:01:19,510 --> 00:01:21,349 código, pero bueno 37 00:01:21,349 --> 00:01:22,950 no es por esto 38 00:01:22,950 --> 00:01:25,170 por lo que se hace la herencia en realidad 39 00:01:25,170 --> 00:01:38,890 No es la mejor manera de reutilizar código, en realidad. Por lo que se hace la herencia es para poder generalizar y tratar a objetos de diferentes clases, tratarlos de una manera común. 40 00:01:38,890 --> 00:02:00,150 ¿Vale? No tener que hacer métodos específicos para cada entidad, porque si todos comparten algo, todos los clientes, cliente VIP, cliente moroso, cliente no sé qué, todos comparten algo, en este caso que son clientes, pues los puedo tratar a todos por igual en algunas cosas. 41 00:02:00,150 --> 00:02:03,709 entonces esa sí es la verdadera ventaja de la herencia 42 00:02:03,709 --> 00:02:06,189 entonces ¿en qué se traduce? 43 00:02:06,310 --> 00:02:08,169 pues el ejemplo que pusimos aquí en el main 44 00:02:08,169 --> 00:02:10,750 pues vimos cómo efectivamente 45 00:02:10,750 --> 00:02:13,449 en una referencia de tipo cliente 46 00:02:13,449 --> 00:02:16,129 aquí en una raya además 47 00:02:16,129 --> 00:02:19,750 se puede guardar cualquier tipo de cliente 48 00:02:19,750 --> 00:02:22,009 yo tengo una colección entera 49 00:02:22,009 --> 00:02:25,490 y puedo tener clientes de diferentes tipos en esa colección 50 00:02:25,490 --> 00:02:30,300 en este método 51 00:02:30,300 --> 00:02:32,699 este método, que hacíamos un método aquí 52 00:02:32,699 --> 00:02:34,780 dentro de mi main, en el que 53 00:02:34,780 --> 00:02:36,719 yo decía, oye voy a mostrar los datos 54 00:02:36,719 --> 00:02:38,400 de un cliente 55 00:02:38,400 --> 00:02:40,840 entonces, aquí este método 56 00:02:40,840 --> 00:02:42,879 es un método que yo hago único 57 00:02:42,879 --> 00:02:44,860 para cualquier cliente, me da 58 00:02:44,860 --> 00:02:46,979 igual, este método es único para cualquier 59 00:02:46,979 --> 00:02:48,860 cliente, entonces 60 00:02:48,860 --> 00:02:51,020 le paso como parámetro, efectivamente 61 00:02:51,020 --> 00:02:52,500 un objeto, cliente 62 00:02:52,500 --> 00:02:54,919 pero luego ya en tiempo de ejecución 63 00:02:54,919 --> 00:02:56,460 cuando yo llame a este método 64 00:02:56,460 --> 00:02:58,280 y ya sí que le pase una instancia 65 00:02:58,280 --> 00:03:00,900 lógicamente ya sí que le pasamos una instancia 66 00:03:00,900 --> 00:03:02,759 pues ahora ya 67 00:03:02,759 --> 00:03:04,780 el método trabaja con esa 68 00:03:04,780 --> 00:03:06,900 instancia en particular y esa instancia 69 00:03:06,900 --> 00:03:08,939 puede ser cualquier heredera 70 00:03:08,939 --> 00:03:10,060 de aquí, cualquiera 71 00:03:10,060 --> 00:03:12,939 heredera en primera instancia 72 00:03:12,939 --> 00:03:14,580 o heredera nieta, da igual 73 00:03:14,580 --> 00:03:17,379 entonces 74 00:03:17,379 --> 00:03:20,520 esto nos permitió incorporar 75 00:03:20,520 --> 00:03:22,639 el instance of este de aquí 76 00:03:22,639 --> 00:03:27,300 que es 77 00:03:27,300 --> 00:03:29,860 en tiempo de desarrollo de código 78 00:03:29,860 --> 00:03:32,719 en tiempo de desarrollo de código 79 00:03:32,719 --> 00:03:34,319 yo sé que 80 00:03:34,319 --> 00:03:37,139 esto es un cliente 81 00:03:37,139 --> 00:03:37,439 ¿vale? 82 00:03:38,479 --> 00:03:41,000 y puede ser además de un cliente cualquiera 83 00:03:41,000 --> 00:03:42,919 de sus subclases, cualquiera de sus implementaciones 84 00:03:42,919 --> 00:03:45,300 y claro, en función de la subclase 85 00:03:45,300 --> 00:03:46,840 que sea, yo quiero hacer una cosa 86 00:03:46,840 --> 00:03:47,699 o quiero hacer otra 87 00:03:47,699 --> 00:03:50,500 bueno, pues este operador 88 00:03:50,500 --> 00:03:53,180 este operador es el que nos permite 89 00:03:53,180 --> 00:03:54,340 averiguar 90 00:03:54,340 --> 00:03:56,400 cómo se ha instanciado 91 00:03:56,400 --> 00:03:57,719 un objeto 92 00:03:57,719 --> 00:04:01,080 el objeto C está declarado como cliente 93 00:04:01,080 --> 00:04:03,800 está declarado como cliente 94 00:04:03,800 --> 00:04:06,020 pero se puede haber instanciado 95 00:04:06,020 --> 00:04:07,539 con new cliente 96 00:04:07,539 --> 00:04:09,060 se puede haber instanciado 97 00:04:09,060 --> 00:04:10,539 con new cliente no sé cuál 98 00:04:10,539 --> 00:04:12,740 se puede haber instanciado de mil maneras distintas 99 00:04:12,740 --> 00:04:14,340 yo no lo sé 100 00:04:14,340 --> 00:04:17,160 cualquiera de ellas puede inyectarse aquí 101 00:04:17,160 --> 00:04:19,079 puede inyectarse aquí 102 00:04:19,079 --> 00:04:20,060 en esta referencia 103 00:04:20,060 --> 00:04:23,079 bueno si yo necesito saber 104 00:04:23,079 --> 00:04:25,000 cuál de las variantes es 105 00:04:25,000 --> 00:04:27,620 que lo más normal es que necesites 106 00:04:27,620 --> 00:04:30,279 saberlo para que el método 107 00:04:30,279 --> 00:04:31,839 trate de forma 108 00:04:31,839 --> 00:04:33,220 diferenciada a cada 109 00:04:33,220 --> 00:04:35,660 tipo de objeto. Pues si 110 00:04:35,660 --> 00:04:37,639 necesito saber qué tipo de 111 00:04:37,639 --> 00:04:39,519 objeto es este de aquí, 112 00:04:40,139 --> 00:04:41,180 pues tengo este operador. 113 00:04:42,040 --> 00:04:43,779 ¿Vale? Que funciona 114 00:04:43,779 --> 00:04:45,379 de esta manera. Objeto, 115 00:04:45,899 --> 00:04:47,500 nombre de una clase, 116 00:04:47,660 --> 00:04:49,740 nombre de una clase, devuelve 117 00:04:49,740 --> 00:04:51,259 true si se ha instanciado 118 00:04:51,259 --> 00:04:53,220 como esta clase o false si no. 119 00:04:54,019 --> 00:04:59,439 ¿Vale? Bueno, pues esto 120 00:04:59,439 --> 00:05:00,480 sería una manera 121 00:05:00,480 --> 00:05:03,120 de que a través de un único método 122 00:05:03,120 --> 00:05:04,899 con lo cual haciendo nuestro código 123 00:05:04,899 --> 00:05:06,839 mucho más claro, tratar objetos 124 00:05:06,839 --> 00:05:08,899 de diferentes tipos, a través 125 00:05:08,899 --> 00:05:10,620 de mostrar datos cliente 126 00:05:10,620 --> 00:05:12,480 pues yo puedo 127 00:05:12,480 --> 00:05:14,860 mostrar datos de un cliente VIP 128 00:05:14,860 --> 00:05:16,899 de un cliente moroso, de un cliente 129 00:05:16,899 --> 00:05:18,959 no sé cuántos, a través de un único dato 130 00:05:18,959 --> 00:05:21,060 a través de un único método, mostrar datos 131 00:05:21,060 --> 00:05:23,060 clientes, entonces ser unificado 132 00:05:23,060 --> 00:05:23,980 sea lo que queráis 133 00:05:23,980 --> 00:05:26,699 ¿vale? pero hay otra 134 00:05:26,699 --> 00:05:29,120 manera, otro diseño 135 00:05:29,120 --> 00:05:31,180 otra filosofía, esto es todo cuestiones de diseño 136 00:05:31,180 --> 00:05:31,680 no es 137 00:05:31,680 --> 00:05:34,899 todas las diferentes alternativas que tenemos 138 00:05:34,899 --> 00:05:35,839 para diseñar 139 00:05:35,839 --> 00:05:38,399 no es tanto lo que está bien y lo que está mal 140 00:05:38,399 --> 00:05:41,079 pues hay otra alternativa de diseño 141 00:05:41,079 --> 00:05:44,019 para tratar 142 00:05:44,019 --> 00:05:47,000 a las diferentes subclases de forma 143 00:05:47,000 --> 00:05:48,839 diferenciada, pero todas 144 00:05:48,839 --> 00:05:50,980 bajo un mismo nombre 145 00:05:50,980 --> 00:05:53,000 de método, que es la idea, bajo un mismo 146 00:05:53,000 --> 00:05:54,379 nombre de método, en realidad 147 00:05:54,379 --> 00:05:57,100 estoy haciendo cosas distintas 148 00:05:57,100 --> 00:05:58,660 dependiendo del objeto en el que esté 149 00:05:58,660 --> 00:05:59,800 que es la idea 150 00:05:59,800 --> 00:06:02,100 pues hay otra forma que es 151 00:06:02,100 --> 00:06:04,120 mediante la implementación 152 00:06:04,120 --> 00:06:06,899 de lo que se llama el polimorfismo 153 00:06:06,899 --> 00:06:13,240 entonces el polimorfismo 154 00:06:13,240 --> 00:06:15,000 es el concepto que siempre 155 00:06:15,000 --> 00:06:17,120 aparece cuando se habla de la programación 156 00:06:17,120 --> 00:06:18,600 orientada a objetos y en particular 157 00:06:18,600 --> 00:06:19,500 de la herencia 158 00:06:19,500 --> 00:06:22,139 polimorfismo significa 159 00:06:22,139 --> 00:06:24,939 adoptar muchas formas 160 00:06:24,939 --> 00:06:27,379 evidentemente, esa es la traducción de la palabra 161 00:06:27,379 --> 00:06:29,120 algo polimorfo adopta 162 00:06:29,120 --> 00:06:29,779 muchas formas 163 00:06:29,779 --> 00:06:31,459 bueno pues 164 00:06:31,459 --> 00:06:33,220 este método 165 00:06:33,220 --> 00:06:34,519 uno podría decir 166 00:06:34,519 --> 00:06:35,180 este método 167 00:06:35,180 --> 00:06:36,839 es polimorfo 168 00:06:36,839 --> 00:06:37,279 porque 169 00:06:37,279 --> 00:06:38,519 si 170 00:06:38,519 --> 00:06:40,779 el cliente 171 00:06:40,779 --> 00:06:41,800 es de cliente VIP 172 00:06:41,800 --> 00:06:43,660 hace esta línea 173 00:06:43,660 --> 00:06:44,300 de código 174 00:06:44,300 --> 00:06:46,720 si el cliente 175 00:06:46,720 --> 00:06:47,860 no es cliente VIP 176 00:06:47,860 --> 00:06:48,980 no hace esta línea 177 00:06:48,980 --> 00:06:49,639 de código 178 00:06:49,639 --> 00:06:50,500 entonces 179 00:06:50,500 --> 00:06:51,660 hombre no puede interpretar 180 00:06:51,660 --> 00:06:52,600 que es polimorfo 181 00:06:52,600 --> 00:06:53,079 pero a ver 182 00:06:53,079 --> 00:06:54,120 no es exactamente 183 00:06:54,120 --> 00:06:55,199 este el significado 184 00:06:55,199 --> 00:06:55,959 de polimorfismo 185 00:06:55,959 --> 00:06:58,279 sino la que vamos 186 00:06:58,279 --> 00:06:58,899 a ver ahora 187 00:06:58,899 --> 00:07:00,920 vale 188 00:07:00,920 --> 00:07:02,939 pues bueno, una alternativa 189 00:07:02,939 --> 00:07:05,839 para poder mostrar los datos del cliente 190 00:07:05,839 --> 00:07:07,639 de forma diferenciada 191 00:07:07,639 --> 00:07:09,040 en función del cliente que sea 192 00:07:09,040 --> 00:07:10,240 una alternativa a esta 193 00:07:10,240 --> 00:07:11,920 pues 194 00:07:11,920 --> 00:07:15,259 vamos a volver a nuestro diseño de cliente 195 00:07:15,259 --> 00:07:15,959 y cliente normal 196 00:07:15,959 --> 00:07:18,379 vale, pues como este método 197 00:07:18,379 --> 00:07:20,279 mostrar datos cliente 198 00:07:20,279 --> 00:07:23,040 con quien trabaja, con un cliente 199 00:07:23,040 --> 00:07:24,040 para mostrar sus datos 200 00:07:24,040 --> 00:07:26,339 luego yo lo he ubicado aquí 201 00:07:26,339 --> 00:07:28,279 lo he ubicado aquí en mi main 202 00:07:28,279 --> 00:07:30,060 recordad que este método estaba en el main 203 00:07:30,060 --> 00:07:33,920 estaba en el main 204 00:07:33,920 --> 00:07:35,839 entonces me he hecho un método auxiliar 205 00:07:35,839 --> 00:07:38,259 mostrar datos cliente 206 00:07:38,259 --> 00:07:40,300 al que le tengo que pasar el cliente 207 00:07:40,300 --> 00:07:42,139 y así he tirado 208 00:07:42,139 --> 00:07:44,120 con mi aplicación y podría seguir así hasta el 209 00:07:44,120 --> 00:07:45,180 infinito de mi aplicación 210 00:07:45,180 --> 00:07:47,920 pero hombre, este diseño 211 00:07:47,920 --> 00:07:49,680 es bastante feo 212 00:07:49,680 --> 00:07:50,500 porque 213 00:07:50,500 --> 00:07:54,220 primero, mete muchas cosas en la clase main 214 00:07:54,220 --> 00:07:55,360 la clase main 215 00:07:55,360 --> 00:07:58,060 tiene que hacer lo menos posible 216 00:07:58,060 --> 00:08:15,560 Y segundo, esto de aquí, ¿con quién trabaja? Con un cliente, ya está. Pues entonces, si esto de aquí trabaja con un cliente, eso es un comportamiento del objeto cliente, luego eso debería ir en la clase cliente, ¿vale? 217 00:08:15,560 --> 00:08:17,959 es decir, mostrar 218 00:08:17,959 --> 00:08:20,339 un cliente sus datos es una cosa 219 00:08:20,339 --> 00:08:22,500 que hace un objeto cliente 220 00:08:22,500 --> 00:08:24,420 bueno, pues entonces las cosas 221 00:08:24,420 --> 00:08:26,420 que hacen los objetos, lo normal 222 00:08:26,420 --> 00:08:28,339 es que se declaren en las clases 223 00:08:28,339 --> 00:08:29,860 de esos objetos 224 00:08:29,860 --> 00:08:32,559 entonces aquí está como metido 225 00:08:32,559 --> 00:08:33,960 un poco a calzador este método 226 00:08:33,960 --> 00:08:36,399 claro, uno arranca la aplicación 227 00:08:36,399 --> 00:08:38,460 y puede tirar con ella hasta donde llegue 228 00:08:38,460 --> 00:08:40,440 pero hombre 229 00:08:40,440 --> 00:08:42,419 la idea es seguir ciertas pautas 230 00:08:42,419 --> 00:08:44,059 de diseño, entonces 231 00:08:44,059 --> 00:09:05,700 Pues idealmente, si mi aplicación va a necesitar que se muestren los datos de los clientes, pues donde lo colocaríamos aquí, ¿vale? Era un poco lo que cuando empezamos con clases objeto, o sea, lo que decíamos. Las clases tienen propiedades y comportamientos, que es lo que el objeto me interesa que haga en la aplicación. 232 00:09:05,700 --> 00:09:08,960 pues aquí en la aplicación voy a necesitar 233 00:09:08,960 --> 00:09:11,559 que el objeto cliente muestre sus datos 234 00:09:11,559 --> 00:09:15,179 lo voy a necesitar, pues metámoslo aquí en la clase cliente 235 00:09:15,179 --> 00:09:17,559 pues nada, aquí meteríamos 236 00:09:17,559 --> 00:09:22,080 un método cualquiera 237 00:09:22,080 --> 00:09:25,809 mostrar datos 238 00:09:25,809 --> 00:09:30,919 lógicamente no le pasaríamos nada 239 00:09:30,919 --> 00:09:32,399 como parámetro, nada 240 00:09:32,399 --> 00:09:37,080 porque este método ya accede a todas las propiedades del objeto 241 00:09:37,080 --> 00:09:39,100 luego no necesita que le pasemos nada 242 00:09:39,100 --> 00:09:48,250 Pues magnífico 243 00:09:48,250 --> 00:09:49,450 Soy un 244 00:09:49,450 --> 00:09:54,990 Para que no sea un toString estándar 245 00:09:54,990 --> 00:09:57,830 Soy el cliente 246 00:09:57,830 --> 00:10:02,289 Nombre 247 00:10:02,289 --> 00:10:06,759 Y 248 00:10:06,759 --> 00:10:13,179 Y minifest 249 00:10:13,179 --> 00:10:15,899 Vale 250 00:10:15,899 --> 00:10:24,759 Esto desde no sé qué versión 251 00:10:24,759 --> 00:10:25,919 Creo que lo hemos usado alguna vez 252 00:10:25,919 --> 00:10:28,580 Puedes hacer un stream multilínea así 253 00:10:28,580 --> 00:10:28,960 ¿No? 254 00:10:29,919 --> 00:10:31,200 Y hasta que no 255 00:10:31,200 --> 00:10:33,440 pero cuando 256 00:10:33,440 --> 00:10:35,799 ¿qué pasa? pero cuando lo rompes 257 00:10:35,799 --> 00:10:37,639 con el más, no me acuerdo 258 00:10:37,639 --> 00:10:38,419 como quedaba 259 00:10:38,419 --> 00:10:43,299 ya, ya sé que tiene que estar al principio y al final 260 00:10:43,299 --> 00:10:45,600 pero el tema es cuando estás rompiendo 261 00:10:45,600 --> 00:10:47,399 el string para concatenarle cosas 262 00:10:47,399 --> 00:10:48,200 entre medias 263 00:10:48,200 --> 00:10:49,580 entonces no 264 00:10:49,580 --> 00:10:52,240 ya, pero 265 00:10:52,240 --> 00:10:54,559 bueno 266 00:10:54,559 --> 00:10:56,919 estás hablando con los expertos de la triple comilla 267 00:10:56,919 --> 00:10:59,080 no saben hacer otra cosa, no saben hacer un array 268 00:10:59,080 --> 00:11:00,480 pero saben hacer triple comillas 269 00:11:00,480 --> 00:11:04,299 bueno, a ver 270 00:11:04,299 --> 00:11:06,519 si estos detallitos os gustan 271 00:11:06,519 --> 00:11:09,000 jugar con ellos, yo para los detallitos 272 00:11:09,000 --> 00:11:10,639 normalmente los paso por alto 273 00:11:10,639 --> 00:11:11,840 no me dan igual 274 00:11:11,840 --> 00:11:14,539 aquí era por si quedaba muy largo 275 00:11:14,539 --> 00:11:16,519 pero vamos 276 00:11:16,519 --> 00:11:17,480 esos detallitos ya 277 00:11:17,480 --> 00:11:20,600 ya es un tema vuestro, no es lo que me 278 00:11:20,600 --> 00:11:21,620 importa a mi, vale 279 00:11:21,620 --> 00:11:23,059 bueno 280 00:11:23,059 --> 00:11:28,600 vale, pues ya tendríamos el método mostrar datos 281 00:11:28,600 --> 00:11:30,419 vale, muy bien, entonces 282 00:11:30,419 --> 00:11:32,559 ¿qué hemos ganado poniendo aquí el método 283 00:11:32,559 --> 00:11:34,740 de mostrar datos? Pues lógicamente 284 00:11:34,740 --> 00:11:35,740 que desde mi main 285 00:11:35,740 --> 00:11:38,340 ahora ya este método que se queda aquí 286 00:11:38,340 --> 00:11:39,480 pues 287 00:11:39,480 --> 00:11:42,259 paso de él 288 00:11:42,259 --> 00:11:44,360 ¿qué hemos ganado yo ahora 289 00:11:44,360 --> 00:11:46,500 con mi método de mostrar datos? Pues que 290 00:11:46,500 --> 00:11:48,379 ahora cualquier cliente creado puede mostrar 291 00:11:48,379 --> 00:11:50,379 datos, ¿verdad? Por ejemplo, este C3 292 00:11:50,379 --> 00:11:52,740 puede aquí 293 00:11:52,740 --> 00:11:54,240 mostrar sus datos 294 00:11:54,240 --> 00:11:56,519 vale, este objeto C3 que está 295 00:11:56,519 --> 00:11:58,019 sin instanciar, por eso no 296 00:11:58,019 --> 00:12:00,080 a ver, voy a poner aquí arriba 297 00:12:00,080 --> 00:12:04,080 Por ejemplo, este era mi main que estaba haciendo de pruebas 298 00:12:04,080 --> 00:12:05,340 Tengo mi cliente C1 299 00:12:05,340 --> 00:12:08,799 Pues mi cliente C1 puede mostrar sus datos 300 00:12:08,799 --> 00:12:09,740 ¿Vale? 301 00:12:10,379 --> 00:12:12,600 Entonces, bueno, este diseño es mejor 302 00:12:12,600 --> 00:12:15,919 Que no llamar al método 303 00:12:15,919 --> 00:12:18,799 Mostrar datos cliente 304 00:12:18,799 --> 00:12:21,899 Y pasarle el objeto C 305 00:12:21,899 --> 00:12:25,860 Mostrar datos cliente y pasarle C 306 00:12:25,860 --> 00:12:28,539 en realidad estoy haciendo 307 00:12:28,539 --> 00:12:30,139 lo mismo con los dos diseños 308 00:12:30,139 --> 00:12:30,500 ¿verdad? 309 00:12:31,919 --> 00:12:34,240 con este estoy llamando al método auxiliar 310 00:12:34,240 --> 00:12:35,179 que está en el mail 311 00:12:35,179 --> 00:12:37,820 con este estoy llamando al método 312 00:12:37,820 --> 00:12:39,740 que está en la clase cliente 313 00:12:39,740 --> 00:12:40,879 ¿vale? 314 00:12:41,639 --> 00:12:42,080 pero 315 00:12:42,080 --> 00:12:43,360 pero 316 00:12:43,360 --> 00:12:49,889 esto 317 00:12:49,889 --> 00:12:52,549 feo, muy mal, caca 318 00:12:52,549 --> 00:12:53,570 y esto bien 319 00:12:53,570 --> 00:12:55,850 esto mal, esto bien 320 00:12:55,850 --> 00:12:58,929 ¿por qué esto mal? 321 00:12:59,929 --> 00:13:01,090 mal en cuanto a 322 00:13:01,090 --> 00:13:02,389 conceptualmente 323 00:13:02,389 --> 00:13:04,450 porque estoy metiendo 324 00:13:04,450 --> 00:13:07,149 aspectos de mi negocio 325 00:13:07,149 --> 00:13:09,129 en la clase 326 00:13:09,129 --> 00:13:10,529 main, no 327 00:13:10,529 --> 00:13:12,250 el cliente 328 00:13:12,250 --> 00:13:14,990 se caracteriza y su comportamiento es un tema 329 00:13:14,990 --> 00:13:17,049 ya de mi negocio y lo tengo que ubicar en cliente 330 00:13:17,049 --> 00:13:19,250 si yo ahora hago cualquier cambio 331 00:13:19,250 --> 00:13:20,970 en mis clientes 332 00:13:20,970 --> 00:13:22,889 yo me voy 333 00:13:22,889 --> 00:13:25,129 a mi diseño de clases y me voy 334 00:13:25,129 --> 00:13:26,509 a cliente y ahí lo encuentro 335 00:13:26,509 --> 00:13:28,590 y mi main no tiene ni que enterarse 336 00:13:28,590 --> 00:13:30,769 con este diseño de aquí abajo 337 00:13:30,769 --> 00:13:32,950 de aquí abajo, mostrar datos 338 00:13:32,950 --> 00:13:35,090 clientes, está como 339 00:13:35,090 --> 00:13:36,789 método auxiliar dentro del main 340 00:13:36,789 --> 00:13:39,210 no está en cliente, entonces si yo 341 00:13:39,210 --> 00:13:40,950 hago cualquier cambio con los clientes 342 00:13:40,950 --> 00:13:43,370 no es a la clase cliente 343 00:13:43,370 --> 00:13:45,110 donde me tengo que ir, sino a la clase main 344 00:13:45,110 --> 00:13:47,730 ya ves tú que tendrá que ver la clase main con los clientes 345 00:13:47,730 --> 00:13:49,009 ¿vale? 346 00:13:49,190 --> 00:13:51,289 bueno, eso en cuanto a pequeñas pautas de diseño 347 00:13:51,289 --> 00:13:53,529 ¿vale? pero ahora, a lo que íbamos 348 00:13:53,529 --> 00:14:17,340 Yo ahora he puesto aquí ya mi método mostrar datos dentro de cliente. Vale, como cliente VIP hereda de cliente, hereda, este método mostrar datos que yo he puesto aquí, este método tal cual está en cliente VIP, aunque yo no lo escriba, tal cual. 349 00:14:17,340 --> 00:14:20,120 Ahí está ese, aunque yo no lo toque 350 00:14:20,120 --> 00:14:21,299 Aunque yo no lo escriba 351 00:14:21,299 --> 00:14:23,059 Ese está tal cual 352 00:14:23,059 --> 00:14:25,679 ¿Qué significa eso? 353 00:14:26,039 --> 00:14:28,000 Que yo ahora me he hecho mi cliente VIP 354 00:14:28,000 --> 00:14:28,700 C2 355 00:14:28,700 --> 00:14:32,019 Y yo ahora mi cliente VIP C2 356 00:14:32,019 --> 00:14:34,799 También puede llamar a mostrar datos 357 00:14:34,799 --> 00:14:37,019 Y ningún problema 358 00:14:37,019 --> 00:14:39,120 C2 es de la clase 359 00:14:39,120 --> 00:14:39,919 Cliente VIP 360 00:14:39,919 --> 00:14:42,820 Y puede llamar a mostrar datos 361 00:14:42,820 --> 00:14:44,519 Porque mostrar datos está aquí 362 00:14:44,519 --> 00:14:46,299 Aunque yo no lo vea físicamente 363 00:14:46,299 --> 00:14:48,539 Porque se ha hecho un copia y pega de este 364 00:14:48,539 --> 00:14:51,710 Hasta ahí vale, ¿no? 365 00:14:52,450 --> 00:14:55,190 Y si uno ejecuta esto, pues efectivamente 366 00:14:55,190 --> 00:15:00,299 Aparecerán los datos de los dos 367 00:15:00,299 --> 00:15:00,899 ¿Vale? 368 00:15:03,899 --> 00:15:06,840 Esta es la llamada del cliente normal C1 369 00:15:06,840 --> 00:15:10,059 Y esta es la llamada del cliente VIP C2 370 00:15:10,059 --> 00:15:12,139 ¿Pero no ha hecho como el cliente? 371 00:15:12,580 --> 00:15:14,399 Claro, porque ha heredado el método 372 00:15:14,399 --> 00:15:15,559 Y el método dice esto 373 00:15:15,559 --> 00:15:16,179 Ah, vale 374 00:15:16,179 --> 00:15:19,120 Ahora viene esa pregunta, es Jolín 375 00:15:19,120 --> 00:15:20,740 Pues esta es una herencia 376 00:15:20,740 --> 00:15:22,539 que no me interesa nada 377 00:15:22,539 --> 00:15:24,299 diría el cliente VIP 378 00:15:24,299 --> 00:15:26,580 estoy heredando un método 379 00:15:26,580 --> 00:15:28,120 que no me gusta 380 00:15:28,120 --> 00:15:30,700 porque sí, está mostrando mi parte común 381 00:15:30,700 --> 00:15:32,759 que es ni fin hombre, pero hombre 382 00:15:32,759 --> 00:15:34,679 yo soy un cliente VIP 383 00:15:34,679 --> 00:15:36,759 y lo que estoy 384 00:15:36,759 --> 00:15:38,960 heredando de ti, pues no me gusta 385 00:15:38,960 --> 00:15:40,639 querría darle otra 386 00:15:40,639 --> 00:15:42,779 forma, pues ahí viene 387 00:15:42,779 --> 00:15:44,299 el polimorfismo, que es 388 00:15:44,299 --> 00:15:46,799 lo que yo heredo, lo puedo 389 00:15:46,799 --> 00:15:48,960 dejar tal cual, o lo puedo 390 00:15:48,960 --> 00:15:50,080 cambiar, lo puedo 391 00:15:50,080 --> 00:15:53,919 reescribir de nuevas, le puedo dar otra forma 392 00:15:53,919 --> 00:15:58,299 de ahí viene el nombre de polimorfismo, entonces cliente VIP dice 393 00:15:58,299 --> 00:16:01,519 a ver, los getter y los setter que le he dado me encantan 394 00:16:01,519 --> 00:16:06,500 pero mostrar datos no me gusta, pues lo sobrescribo 395 00:16:06,500 --> 00:16:09,220 y sobrescribirlo implica 396 00:16:09,220 --> 00:16:14,000 hacerlo enterito de nuevas otra vez, no es 397 00:16:14,000 --> 00:16:18,440 añado lo nuevo, no, no, no, lo tengo que escribir 398 00:16:18,440 --> 00:16:20,320 de nuevas, con la misma 399 00:16:20,320 --> 00:16:21,059 cabecera 400 00:16:21,059 --> 00:16:23,379 tal cual 401 00:16:23,379 --> 00:16:26,440 este ya, el heredado 402 00:16:26,440 --> 00:16:27,860 ha desaparecido 403 00:16:27,860 --> 00:16:29,799 el heredado ha desaparecido completamente 404 00:16:29,799 --> 00:16:32,419 yo lo escribo 405 00:16:32,419 --> 00:16:34,679 de nuevas y en este caso haría, ahora soy cliente 406 00:16:34,679 --> 00:16:35,440 aquí nombre 407 00:16:35,440 --> 00:16:38,399 no lo ve, es normal que no lo vea 408 00:16:38,399 --> 00:16:39,019 porque 409 00:16:39,019 --> 00:16:40,700 está 410 00:16:40,700 --> 00:16:44,100 aquí como privado, vale 411 00:16:44,100 --> 00:16:49,230 bueno, ahora esto lo digo ahora 412 00:16:49,230 --> 00:16:49,990 Porque no es trivial 413 00:16:49,990 --> 00:16:51,470 Vale, entonces, ¿qué añadiría esto? 414 00:16:52,429 --> 00:16:58,450 O sea, sniff y este método querríamos que 415 00:16:58,450 --> 00:16:59,830 Ahora corregimos ese rojo 416 00:16:59,830 --> 00:17:02,669 Y además querríamos 417 00:17:02,669 --> 00:17:14,700 Y mi dirección es dirección 418 00:17:14,700 --> 00:17:18,259 Vale, ahora corregimos ese rojo 419 00:17:18,259 --> 00:17:21,420 Vamos ahora a la sobrescritura 420 00:17:21,420 --> 00:17:29,799 Bueno, pues esto es sobrescribir en un método, que es coger ese método con esa cabecera y darle otro cuerpo completo. 421 00:17:30,740 --> 00:17:38,480 Entonces, desde el momento que en la clase heredera aparece un método con el mismo nombre cabecera que el de la superclase, 422 00:17:39,019 --> 00:17:44,759 el de la superclase ya desaparece, ¿vale? Ya desaparece y este es el sobrescrito. 423 00:17:44,759 --> 00:17:48,680 ¿vale? pues este es el polimorfismo 424 00:17:48,680 --> 00:17:51,940 es decir, el método se llama igual 425 00:17:51,940 --> 00:17:54,079 mostrar datos, en ambos casos 426 00:17:54,079 --> 00:17:56,140 pero depende de quien lo llame 427 00:17:56,140 --> 00:17:58,059 adopta una forma u otra 428 00:17:58,059 --> 00:18:00,359 aquí en este main 429 00:18:00,359 --> 00:18:03,140 tendríamos 430 00:18:03,140 --> 00:18:06,160 C1 mostrar datos 431 00:18:06,160 --> 00:18:08,079 y C2 mostrar datos 432 00:18:08,079 --> 00:18:11,559 ¿vale? 433 00:18:12,380 --> 00:18:14,579 luego las llamadas son idénticas 434 00:18:14,579 --> 00:18:15,960 las llamadas son iguales 435 00:18:15,960 --> 00:18:21,039 Los dos llaman a mostrar datos, pero la versión del método a la que llaman es diferente. 436 00:18:21,940 --> 00:18:23,160 C1, ¿a qué versión llama? 437 00:18:23,839 --> 00:18:27,839 Pues llama a la versión suya tal y como se ha instanciado. 438 00:18:28,519 --> 00:18:30,539 ¿Tú cómo te has instanciado? Como cliente. 439 00:18:31,079 --> 00:18:35,859 Entonces, como tú te has instanciado como cliente, tú llamas a esta versión de cliente. 440 00:18:37,140 --> 00:18:37,740 Llamas a esta. 441 00:18:40,480 --> 00:18:44,039 Aquí, C2, ¿tú cómo te has instanciado? 442 00:18:44,380 --> 00:18:46,599 Tú te has instanciado como cliente VIP. 443 00:18:46,599 --> 00:18:50,019 Entonces como tú te has instanciado como cliente VIP 444 00:18:50,019 --> 00:18:52,799 Tú llamas a esta 445 00:18:52,799 --> 00:18:54,579 Ahora le corregimos eso 446 00:18:54,579 --> 00:18:55,440 Tú llamas a esta 447 00:18:55,440 --> 00:18:59,039 Luego por eso este método es polimórfico 448 00:18:59,039 --> 00:19:01,940 Porque adopta una forma o adopta otra 449 00:19:01,940 --> 00:19:05,019 En función de cómo se ha instanciado ese objeto 450 00:19:05,019 --> 00:19:07,480 ¿Vale? 451 00:19:07,539 --> 00:19:08,640 Cómo se ha instanciado 452 00:19:08,640 --> 00:19:10,099 No cómo se ha declarado 453 00:19:10,099 --> 00:19:11,960 Cómo se ha instanciado 454 00:19:11,960 --> 00:19:15,450 ¿Vale? 455 00:19:15,470 --> 00:19:18,250 Porque cliente el C2 este 456 00:19:18,250 --> 00:19:21,130 el C2 podría yo haberlo declarado 457 00:19:21,130 --> 00:19:22,970 así, no hay ningún problema 458 00:19:22,970 --> 00:19:25,190 ¿verdad? voy a quitar esto para que 459 00:19:25,190 --> 00:19:28,910 podría haberlo declarado así, voy a poner el casting 460 00:19:28,910 --> 00:19:30,450 para que no se queje, claro 461 00:19:30,450 --> 00:19:32,049 vale 462 00:19:32,049 --> 00:19:35,109 vale, podría yo haberlo 463 00:19:35,109 --> 00:19:36,450 declarado como cliente ¿verdad? 464 00:19:37,009 --> 00:19:38,869 no hay ningún problema, ya sabemos que yo luego 465 00:19:38,869 --> 00:19:40,809 lo instancio como cualquiera de las subclases 466 00:19:40,809 --> 00:19:43,170 vale, si yo lo declaro 467 00:19:43,170 --> 00:19:44,170 como cliente 468 00:19:44,170 --> 00:19:47,049 la versión de mostrar 469 00:19:47,049 --> 00:19:48,309 datos a la que se llama 470 00:19:48,309 --> 00:19:50,670 esa la de cliente, no 471 00:19:50,670 --> 00:19:52,109 siempre se llama 472 00:19:52,109 --> 00:19:55,569 a la correspondiente a como se instanció 473 00:19:55,569 --> 00:19:57,289 vale 474 00:19:57,289 --> 00:20:06,079 siempre, vale 475 00:20:06,079 --> 00:20:07,759 la versión a la que se llama 476 00:20:07,759 --> 00:20:09,759 corresponde 477 00:20:09,759 --> 00:20:11,720 a la de la 478 00:20:11,720 --> 00:20:13,960 instanciación, no a la de la creación 479 00:20:13,960 --> 00:20:15,920 declaración, perdón, instancia 480 00:20:15,920 --> 00:20:17,519 acción 481 00:20:17,519 --> 00:20:20,240 es decir 482 00:20:20,240 --> 00:20:21,539 me da igual que C2 483 00:20:21,539 --> 00:20:22,720 se haya 484 00:20:22,720 --> 00:20:25,099 declarado como 485 00:20:25,099 --> 00:20:27,000 cliente, se ha declarado como 486 00:20:27,000 --> 00:20:28,960 cliente, pero se ha construido 487 00:20:28,960 --> 00:20:30,579 se ha instanciado como cliente VIP 488 00:20:30,579 --> 00:20:33,180 luego la versión a la que se llama 489 00:20:33,180 --> 00:20:35,119 es a la de la instanciación 490 00:20:35,119 --> 00:20:36,299 ¿vale? 491 00:20:37,519 --> 00:20:39,059 pues este es el polimorfismo 492 00:20:39,059 --> 00:20:46,420 o sea, esa 493 00:20:46,420 --> 00:20:48,079 llama a la de cliente 494 00:20:48,079 --> 00:20:48,500 entonces 495 00:20:48,500 --> 00:20:51,779 este de aquí llama a la de cliente 496 00:20:51,779 --> 00:20:54,480 porque está creado como new cliente 497 00:20:54,480 --> 00:20:55,859 y esta llama 498 00:20:55,859 --> 00:20:57,099 a la de 499 00:20:57,099 --> 00:20:59,240 cliente VIP, porque está 500 00:20:59,240 --> 00:21:01,819 creado como new cliente VIP 501 00:21:01,819 --> 00:21:03,500 tal y como esté 502 00:21:03,500 --> 00:21:05,140 creado, esa es a la que llama 503 00:21:05,140 --> 00:21:07,779 y tiene sentido 504 00:21:07,779 --> 00:21:09,619 tiene sentido, lo que importa 505 00:21:09,619 --> 00:21:11,059 es tú que eres un cliente VIP 506 00:21:11,059 --> 00:21:13,460 pues tu comportamiento tiene que ser 507 00:21:13,460 --> 00:21:15,500 en tiempo de ejecución, tu comportamiento tiene que ser 508 00:21:15,500 --> 00:21:17,920 el de cliente VIP, depende de lo que tú eras 509 00:21:17,920 --> 00:21:21,000 claro, pero 510 00:21:21,000 --> 00:21:23,200 porque aquí estamos en tiempo de escritura de código 511 00:21:23,200 --> 00:21:24,940 que es un tiempo diferente al de ejecución 512 00:21:24,940 --> 00:21:27,039 el tiempo de escritura de código 513 00:21:27,039 --> 00:21:29,660 es el de las reglas, el de la sintaxis 514 00:21:29,660 --> 00:21:31,539 el de hacerle 515 00:21:31,539 --> 00:21:32,200 el de 516 00:21:32,200 --> 00:21:35,680 respetar lo que el compilador te obliga 517 00:21:35,680 --> 00:21:37,720 a hacer para prever 518 00:21:37,720 --> 00:21:38,980 la mayoría de los errores posibles 519 00:21:38,980 --> 00:21:40,900 entonces en tiempo de escritura de código 520 00:21:40,900 --> 00:21:43,099 tú pones C2 en dirección 521 00:21:43,099 --> 00:21:45,140 el compilador te dice 522 00:21:45,140 --> 00:21:47,900 a ver, C2 está declarado como cliente 523 00:21:47,900 --> 00:21:49,700 porque puede no tener 524 00:21:49,700 --> 00:21:51,059 acceso como está instanciado 525 00:21:51,059 --> 00:21:53,059 de hecho, aquí 526 00:21:53,059 --> 00:21:55,599 ¿por qué ocurre eso? porque él mira como se ha 527 00:21:55,599 --> 00:21:57,819 declarado. Porque en muchas situaciones 528 00:21:57,819 --> 00:21:59,480 no tiene acceso a cómo se ha instanciado. 529 00:21:59,940 --> 00:22:01,180 Aquí el compilador 530 00:22:01,180 --> 00:22:03,500 C 531 00:22:03,500 --> 00:22:05,740 cuando hagamos... Aquí no podríamos hacer 532 00:22:05,740 --> 00:22:07,000 C.dirección 533 00:22:07,000 --> 00:22:09,839 porque, claro, el compilador 534 00:22:09,839 --> 00:22:11,539 no puede saber. 535 00:22:11,640 --> 00:22:13,599 Es imposible. No puede saber cómo se instanció 536 00:22:13,599 --> 00:22:15,240 este. No puede saberlo. 537 00:22:16,559 --> 00:22:17,700 ¿Esto cómo se habrá 538 00:22:17,700 --> 00:22:19,599 instanciado? Eso ya dependerá del main que llame 539 00:22:19,599 --> 00:22:21,720 a este. Ese main a saber dónde estará. 540 00:22:21,799 --> 00:22:22,640 No está en este fichero. 541 00:22:22,640 --> 00:22:24,740 no está, entonces el compilador 542 00:22:24,740 --> 00:22:26,819 tiene que mirar la clase 543 00:22:26,819 --> 00:22:28,779 como se ha declarado, pero eso es 544 00:22:28,779 --> 00:22:31,000 el compilador, en tiempo de escritura 545 00:22:31,000 --> 00:22:33,220 de código, entonces el compilador 546 00:22:33,220 --> 00:22:34,720 verifica, vale 547 00:22:34,720 --> 00:22:36,859 C punto no sé qué, esto está en cliente 548 00:22:36,859 --> 00:22:38,720 bien, C punto 549 00:22:38,720 --> 00:22:40,619 que es dirección, esto está en cliente 550 00:22:40,619 --> 00:22:43,119 no, no te dejo ponerlo porque no está en cliente 551 00:22:43,119 --> 00:22:45,039 pero si tú sabes 552 00:22:45,039 --> 00:22:46,339 si tú sabes 553 00:22:46,339 --> 00:22:48,240 que C en realidad 554 00:22:48,240 --> 00:22:50,680 es una instancia de cliente VIP 555 00:22:50,680 --> 00:22:51,920 pues te haces el casting 556 00:22:51,920 --> 00:22:53,359 y solucionas 557 00:22:53,359 --> 00:22:54,720 y haces la 558 00:22:54,720 --> 00:22:57,660 trampa, no es trampa, porque es que 559 00:22:57,660 --> 00:22:59,259 tiene todo el sentido de los diseños y así 560 00:22:59,259 --> 00:23:00,740 vale 561 00:23:00,740 --> 00:23:03,819 entonces el compilador sigue sus reglas 562 00:23:03,819 --> 00:23:04,980 ahora de escribir código 563 00:23:04,980 --> 00:23:06,960 pero esto ya es otra situación 564 00:23:06,960 --> 00:23:10,039 aquí estamos ya llamando a métodos 565 00:23:10,039 --> 00:23:12,220 esto es tiempo de ejecución 566 00:23:12,220 --> 00:23:13,900 aquí estamos llamando 567 00:23:13,900 --> 00:23:16,240 aquí estamos ya llamando 568 00:23:16,240 --> 00:23:17,420 esto es tiempo de ejecución 569 00:23:17,420 --> 00:23:19,420 llamo a este método, llamo a este método 570 00:23:19,420 --> 00:23:21,359 y en tiempo de ejecución 571 00:23:21,359 --> 00:23:37,400 Cuando yo ya llamo a métodos, no estoy declarando cosas, cuando yo ya llamo a métodos en tiempo de ejecución, el método que se elige depende de quién eres tú, de cómo te creaste, ¿vale? 572 00:23:39,779 --> 00:23:41,000 Bueno, ¿entendido esto? 573 00:23:51,269 --> 00:23:56,670 Sí, ahora lo arreglamos, sí, sí, lo que me importa es el concepto de, ¿vale? Por eso digo, ¿entendido? 574 00:23:56,670 --> 00:23:59,109 Bueno, pues ahora para poder ejecutar esto 575 00:23:59,109 --> 00:24:00,529 Vamos a arreglar esa cosa roja 576 00:24:00,529 --> 00:24:02,089 Vale, a ver 577 00:24:02,089 --> 00:24:03,630 Este método de aquí 578 00:24:03,630 --> 00:24:06,529 A la hora de escribir aquí 579 00:24:06,529 --> 00:24:08,789 La propiedad de acceso a nombre y a NIF 580 00:24:08,789 --> 00:24:10,630 Dentro de cliente VIP 581 00:24:10,630 --> 00:24:11,390 Que es donde estoy 582 00:24:11,390 --> 00:24:13,029 ¿Veis? No me ha dejado 583 00:24:13,029 --> 00:24:16,089 Y diríamos, pero ¿cómo es que no te deja? 584 00:24:16,630 --> 00:24:18,890 Si nombre y NIF 585 00:24:18,890 --> 00:24:21,029 Lo ha heredado de cliente 586 00:24:21,029 --> 00:24:23,369 Con lo cual es como hacer un copia y pega 587 00:24:23,369 --> 00:24:24,369 ¿Vale? 588 00:24:24,950 --> 00:24:26,170 Yo con lo que he dicho hasta ahora 589 00:24:26,170 --> 00:24:28,869 perdona, si cliente VIP hereda de cliente 590 00:24:28,869 --> 00:24:30,650 estás haciendo un copia y pega de todo 591 00:24:30,650 --> 00:24:32,650 salvo de los constructores 592 00:24:32,650 --> 00:24:35,490 sí, pero cuidado 593 00:24:35,490 --> 00:24:37,730 porque los modificadores de acceso son muy puñeteros 594 00:24:37,730 --> 00:24:40,009 sí que estás haciendo un copia y pega 595 00:24:40,009 --> 00:24:41,170 en el sentido de que 596 00:24:41,170 --> 00:24:43,990 si cliente VIP hereda de cliente 597 00:24:43,990 --> 00:24:46,890 en cliente VIP hay un nombre y un NIF 598 00:24:46,890 --> 00:24:48,130 eso es impepinable 599 00:24:48,130 --> 00:24:49,250 hay un nombre y un NIF 600 00:24:49,250 --> 00:24:51,730 pero, puñetera mala suerte 601 00:24:51,730 --> 00:24:54,890 como cliente les puso el private adelante 602 00:24:54,890 --> 00:24:55,970 que es como debería 603 00:24:55,970 --> 00:24:58,269 el compilador 604 00:24:58,269 --> 00:25:00,390 las hace inaccesibles 605 00:25:00,390 --> 00:25:02,569 desde cualquier parte 606 00:25:02,569 --> 00:25:04,450 que no sea esta clase, incluso 607 00:25:04,450 --> 00:25:05,490 desde las herederas 608 00:25:05,490 --> 00:25:08,269 lo cual se genera una situación absurda 609 00:25:08,269 --> 00:25:10,250 se genera una situación absurda 610 00:25:10,250 --> 00:25:12,549 porque cliente VIP tiene su propiedad 611 00:25:12,549 --> 00:25:14,089 nombre y su propiedad NIF 612 00:25:14,089 --> 00:25:16,490 pero no podemos hacer referencia 613 00:25:16,490 --> 00:25:18,549 a ellas porque estamos fuera de la clase cliente 614 00:25:19,589 --> 00:25:22,670 vale, pues como se soluciona esto 615 00:25:22,670 --> 00:25:24,549 hay dos posibilidades 616 00:25:24,549 --> 00:25:35,839 posibilidades una tirar del get vale podríamos tirar del get y ya está porque el get sí que es 617 00:25:35,839 --> 00:25:47,480 public lo tengo heredado por supuesto como todo y además como es public arriba vale esa es una 618 00:25:47,480 --> 00:25:54,059 manera lo que pasa es que bueno esto quizás es un poco más feo porque dependo que la clase de 619 00:25:54,059 --> 00:25:59,019 arriba tenga get y set que los tendrá que tener porque hacer unas propiedades privadas y no hacer 620 00:25:59,019 --> 00:26:01,299 Pero bueno, dependo 621 00:26:01,299 --> 00:26:03,539 Ah, ya decía yo que no se me movía esto 622 00:26:03,539 --> 00:26:06,180 Vale, a ver 623 00:26:06,180 --> 00:26:09,440 Bueno, pues ahora sí que sí necesito 624 00:26:09,440 --> 00:26:20,930 A ver 625 00:26:20,930 --> 00:26:52,559 Dime 626 00:26:52,559 --> 00:26:56,859 ¿Cómo? 627 00:27:01,160 --> 00:27:02,839 Porque no tendrías private 628 00:27:02,839 --> 00:27:05,000 En las propiedades de cliente 629 00:27:05,000 --> 00:27:15,220 ¿Y este por qué se ha ido? 630 00:27:29,170 --> 00:27:33,079 Porque no me dice que esté cargando 631 00:34:51,289 --> 00:34:52,610 vale, a ver 632 00:34:52,610 --> 00:34:56,929 dime