y a continuacin veremos un ejercicio sobre herencia. Me encuentro en el mtodo main
, recuerda que necesitamos tener una clase que tenga por lo menos, bueno que tenga un mtodo main. Por lo menos necesitamos tener una clase que contenga un mtodo main, que ser el mtodo de entrada de nuestra aplicacin. De acuerdo al ejercicio que vimos yo you he creado una clase playera y tambin una clase jeans y una clase calcetn. Cada una de estas clases tiene atributos. Por ejemplo a la c lase playera le he credo id, precio, talla, color y corte, y respectivamente le he puesto tambin Getters y Setters. Adems le he colocado el mtodo mostrar datos, y aqu me imprime todos los datos de esta clase. De la misma forma, en la clase jeans tambin he colocado un id, precio, talla, color, corte, y adems he agregado u n atributo propio de esta clase que es gnero. La clase calcetin contiene el mtodo id, precio, talla, color. Tambin cada uno de estos atributos tiene su propio manejador de acceso a la informacin, sus getters y setters y tambin contiene el mtodo mostrarDatos. La idea de la herencia es precisamente detectar todas estas cosas que estn siendo redundantes en nuestro cdigo, y que de alguna forma hace la lectura del mismo, pues un poco pesada. Entonces lo que haremos ser integrar todas estas clases a una familia. Tal cual como lo platicamos en los vdeos anteriores. Haremos una familia de estas clases y para ellos crearemos una clase padre, donde detectaremos nuestros elementos redundantes y esos elementos redundantes se los asignaremos a la clase padre, para que l pueda heredrselos a estas clases hijo. Entonces, ir a mi proyecto, aqu donde est mi paquetito, y voy a crear una nueva clase. La clase se va llamar ropa. Esa ser mi clase padre . Yo puedo definir, yo puedo abstraer, yo puedo analizar los elementos redundantes, por ejemplo, todos tienen en comn el id, el precio, la talla, el color respectivamente con sus mtodos. Y tambin, adems el mtodo mostrarDatos. Todo s tienen en comn tambin ese mtodo. mostrarDatos para jeans y este ac abajo, mostraDatos para calcetn. Entonces voy a colocar aqu en mi clase padre, private. Yo coloque por ac arriba el id con un String lo vamos a cambiar. El id no debe ser String debe ser un entero, private int. Private, seguimos con el precio, lo podemos colocar como double. Precio. Despus tambin podemos poner private talla, la talla si puede ser un String, talla. Podemos poner priva te color, y el color tambin puede ser un String. Color, aqu, listo. Y you, perfecto. you ten emos estos cuatro elementos, que son los elementos que detectamos que estn en comn. Vamos a crear tambin sus respectivos getters y setters. Voy a darle click derecho dentro de la clase, en la opcin de source. Y donde dice generar Getters y Setters, seleccio nar todos los elementos y le dar okay. Perfecto. Adems, voy a colocar tambin mi mtodo mostrarDatos, mi mtodo mostrarDatos en la clase padre. Public void mostra rDatos. Y yo puedo decir que mostarDatos, reciba a lo mejor un String del nombre de la clase. Porque detectamos que aqu lo primero que imprimimos es el nombre de la clase o el nombre de la prenda como tal. Enton ces yo puedo recibir esto como un parmetro para estarlo poniendo. Y aqu mismo puedes incluir todos los Getters y Setters. Y aqu mismo incluir todas las impresiones de los atributos que yo tengo por ac. Voy a colocar aqu primeramente, imprimir el nombre de la clase. Luego imprimir el id, el id de ese elemento, de e sa clase. Seria bueno tambin imprimir, imprimiremos el precio, la talla, y el color. Tengo precio, aqu imprimimos el precio. Y por ot ro lado ponemos la talla, tambin, la talla la colocamos as y por ltimo colocamos el color, el color lo concatenamos. you est. Entonces con esto yo you he creado una clase padre, you no necesito tener todas estas cosas por aqu. En primera el mtodo mostrarDatos se va automticamente de todas las clases, you no lo necesitamos. Se va de aqu. Listo se fue. Y tambin los atributos que dete ctamos, no?, id, precio, talla y color los quitamos. En este caso Playera lo nico que tendr ser el corte, entonces por lo tanto tambin me deshar de l. Todos los mtodos que no tienen nada que ver aqu. De esta forma me quedo solamente con dos mtodos y un atributo. Lo mismo har para los Jeans, voy a quitar todos estos elementos, el corte el gnero. Estos son atributos. Que l e corresponden solamente a esta clase, y como vamos observando el cdigo se va haciendo ms digerible. El cdigo va minimizndose en gran manera, pero todava no he terminado. Tengo Calcetin, le vamos a quitar todo a Calcetin. Porque la clase ropa you tiene todo, todos los atributos de calcetn. Como observas, hemos minimizado en gran manera el cdigo. Y ahora, la idea de la herencia es, precisamente, todo esto, todo este cdigo que est aqu, reutilizarlo en las dems clases. Para poder aplicar la herencia en una clase, como vimos en los vdeos anteriores, utilizamos la palabra reservada extends. Extends seguido de la sper clase o de la clase padre. En este caso mi clase padre es la clase Ropa. En este momento esta clase Playera. you tiene todos los atributos. Una playera you tiene un id. Una playera you tiene un precio, una talla y un color. Aunque no los veamos aqu en realidad estn presentes. Por ejemplo si yo quiero desde el mtodo set corte. Llamar no s, get Id, imprimir el Id, puedo aqu llamarlo. Y como observas, tambin est aqu el color, el precio, la talla y aqu te dice exactamente de que clase pertenecen estos mtodos. El mtodo por ejemplo get id nos devuelve un entero y pertenece a la clase ropa. El mtodo get corte, nos devuelve un string y pertenece a esta clase, a la clase playera. Aqu podramos ir observando a qu clase pertenece cada mtodo, yo podra hacer eso, y aunque yo no vea por aqu los mtodos, en realidad es como si estuvieran gracias a la herencia. Entonces voy a quitar sto, lo mismo suceder con los atributos, recuerda que esto va a depender del modificador de acceso que tenga cada elemento. Podemos traernos los elementos pblicos y los elementos protected. Pero los elementos private y default, esos no pueden ser accesibles en la herencia. Si yo por ejemplo, en la clase ropa declaro un elemento pblico, no s, string, le pongo nombre. Puedo yo, desde aq u Accesar al nombre y como observas aqu aparece el atributo nombre como si estuviese declarado aqu. De hecho yo pongo una c, aqu, para por ejemplo poder acce sar al corte y aqu me dice que est en esta clase. Yo puedo poner aqu nombre y me dice que es un string y pertenece a la clase ropa. Pero los dems atributos no los veo, por que los otros atributos estn definidos como privados. Es decir, una caracterstica de este modificador de acceso es que los privado solamente son accesibles para esa clase. No para clases que hereden de ellas, ni clases que es tn en otro paquete, etctera. ste es el ms restrictivo. Entonces, de esta forma you estoy utilizando la herencia y estoy ahorrando mucho cdigo. Yo podra definir un mtodo constructor como lo vimos en los ejercicios anteriores del telfono. Yo podra defin ir un mtodo constructor, por ejemplo ropa. Y yo podra decir para que como mnimo, yo podra decir que, para qu e un objeto de tipo ropa puede ser creado, necesito como mnimo tener los siguientes parmetros, por ejemplo, que tenga un id, que tenga un precio asignado, y que tamb in tenga nada ms. Por ejemplo, vamos a decir, por poner uno ms, una talla y, bueno, podemos decir que sean todos obligatorios, no? Que sean todos los elementos obligatorios para que yo pueda crear un elemento de tipo ropa y, aqu puedo colocar this, le digo id. This lo utilizo mucho cuando tengo variables que tienen el mismo nombre, como observas aqu estoy devolviendo el id, que es esta variable. Y aqu tambin, estoy accesando el id que esta variable. sta anotacin y sta, son equivalentes. En r ealidad me trae el mismo valor, yo tambin aqu podra tener this, as, y no hay ningn problema. Pero es muy comn utilizar this cuando tengo elementos, por ejemplo, this este id, es una variable global y este id es una variable local, entonces ambas variables tienen el mismo nombre. Puedo utilizar this para referirme a mi variable global y puedo utilizar, simplemente sin this, para referirme a la variable local. Entonces con this me estar refiriendo a todos los elementos que estn en la clase, como te lo expliqu en las sesiones anteriores. Todos nuestros elementos que est contenidos en esta clase, los acceso a travs de this. Me falta aqu el color. En tonces, lo que yo estoy haciendo aqu, es que al momento de que creemos un objeto de tipo ropa. Automticamente, todas estas variables se inicializarn. Con lo que una persona le pase aqu, eso lo vimos muy bien explicado en nuestra clase de telfono, cuando vimos el mtodo constructor. Ahora, seguimos por ac a la playera. Qu nos est di ciendo?, dice que necesitamos tambin aadir un constructor. Como yo you estoy aplicando la herencia de ropa, dice que necesitamos aadir un constructor que tenga la misma forma de su clase padre, su clase ropa. Lo aado y me aade un constructor con estos mismo elementos. Entonces lo que yo estoy haciendo aqu es sobreescribiendo este constructor en mi clase hija. Y ahora puede s ver nuestras palabras claves, que platicamos en una sesin anterior. Que vimos this y esta nueva que es super. Yo puedo decir, que para crear una playera necesito el id, s, necesito el precio, tambin, la talla, por supuesto, el color, claro. Y adems necesito que me indiques el corte, yo puedo aadir aqu, corte. Y entonces, desde el momento en e l que yo empiezo a implementar cdigo en un mtodo que estoy sobreescribiendo. En un mtodo que estoy heredando, en este caso el mtodo constructor. En este momento you estoy sobreescribiendo el mtodo, y en ese momento cuando sobreescribimos y le damos implementacin, estamos viendo presente el polimorfismo. Porque ese mtod o se est comportando de diferentes formas. Entonces con super me estoy refiriendo a la clase padre, la sper clase. Super siempre se referir a la sper clase. Por lo tanto aqu me estoy refiriendo. Al mtodo constructor de la c lase padre. La clase padre ropa tiene esta definicin, id, precio, talla y color. Con super estoy pasando los mismos parmetros, id, precio, talla y color. Esto equivaldra como si tuviese ropa, as no s si se pudiera ver de una forma. Pero lo ejemplifico con super, cuando yo p ongo super, y le pongo punto, puedo tener acceso a todos los mtodos de la clase padre. Como observas est por aqu getColor, getColor es un mtodo q ue no est presente en Playera. GetPrecio tambin es un mtodo que no est presente en Playera. Y puedo trarmelos as y estarlos llamando sin problema. Tambin podra traerlo sin la palabra super, y ambos equivalen a lo mismo. Pero con super, indico que me refiero a todos los componentes de la clase padre. Con este super sin punto, me estoy re firiendo al mtodo constructor de la clase padre. Bien, seguramente viste aqu en super, cuando le di punto, viste por ac estos que dicen Object- Object, Ropa, Ropa ,Object, etc. Y es que por regla, por regla general, automticamente todos los mtodos, automticamente todas las clases sin que lo indiques, siquiera. Todas las clases se heredan de la clase padre object. En Java existe la clase padre Object y, automticamente, todas las clases van a heredar de ella. Sin nosotros siquiera ind icarlo con la palabra reservada extends. Si voy por aqu estoy aqu en mi clase Object, aqu est la clase Object. Tiene muchos mtodos, tiene muchos atributos y cuando yo creo un objeto, cuando yo creo una clase o un objeto automticamente. Los mtodos de la clase Object estarn presentes, estarn visibles. Entonces de esta forma yo puedo de una forma sencilla estar ahorrando cdigo. Voy aplicar la herencia tambin en Jeans, Ropa. Voy a definir el constructor tambin para Jeans, y tambin en Jeans tengo dos atributos adicionales. Corte, vamos a poner String corte y char genero char gnero, y tambin pasrselos respectivamente. Corte, le pasam os el corte. Y this.genero, le pasamos el gnero. Ahora el calcetn. Calcetn pues no tienen ninguno. Entonces podra yo nada mas aqu aplicar la herencia para Ropa, you est y coloco un constructor igualito. No neces ito aadirle ms comportamiento a Calcetin, al constructor de Calcetin. Ahora me falta el mtodo mostrar datos. Po rque cuando yo llame el mostrar datos de Playera, solamente me imprimir el id, el precio, la talla y el color. E ignora rn el corte, el corte que es un atributo que yo agregu para Playera. Entonces lo que har ser sobreescribir ese mtodo, sobreescribir en el mtodo mostrarDatos. Puedes sobreescri birlo simplemente colocando una palabra clave, mos de mostrar, y das ctrl barra espaciadora. Y nos aparece aqu. O tambin otra opcin es dando click derecho en Source en la opcin de Override/Implement Methods. Y yo aqu puedo ver todos los mtodos que tengo disponibles para sobrescribir. Por ejemplo el mtodo mostrar datos, ese es el que quiero. Y adems los mtodos de la clase Object. Tambin los puedo sobre escribir, y tambin puedo darles una implementacin personalizada. Voy a traer ese, y como observas, super tambin est hac iendo referencia al mtodo mostrar datos. Pero de la super clase. Yo aqu nada ms, me falta ra aadir el Corte y colocar aqu el Corte. Entonces con esto yo estoy indicando que se ejecute todo lo que est dentro de mostrarDatos. Y adicional, eje cuta sto. Yo podra tambin quitar esto. Podra quitarlo, pero solamente estara implementando, estara mostrando el corte, no estara mostrando todos los dems. Para fines de este ejercicio, Pues voy a dejar esto. Entonces aqu tambin vemos el polimorfismo, en mostrar datos. Estoy sobreescribiendo este mtodo y estoy aadindole un nuevo comportamiento. Puedo aplicar lo mismo para los dems, mostrar da tos y agregar los elementos que me faltan. Me falta para los Jeans, me falta el Corte y tambin me falta el Gnero. Colocamos aqu Genero: y concatenamos el Genero. Listo, y para Calcetin. Tambin podra traer sobreescribir, mostrar datos y para Calcetin, pues no tengo ningn atributo adicional. Entonces, podra ahorrarme la sobreescritura en este caso, porque Calcetin se va a comportar de la misma forma con como ropa. Entonces vemos ,como en el caso de nuestra vida real. Cuando nosotros heredamos caractersticas de nuestros abuelos o heredamos caractersticas a nuestros hijos. Algunos, algunas caractersticas si podemos tenerlas y otras no como tal. Algunas caractersticas podramos. Incluso aadi rlas, tenerlas presentas, pero a lo mejor en una forma distinta. A lo mejor yo podra tener el cabello ondulado, y mi hija podra tener el cabello ondulado s, pero menos ondulado, o con una ondulacin distinta. Ah podramos haber aplicado el polimorfismo. Entonces, de esta forma es como nosotros podemos trabajar la herencia. Y, por ltimo, nada ms me faltara pues probar, probar mis clases. Puedo crear una playera Playera . vamos a ponerla igual a new y yo puedo decir que tenga un id 1, a un precio de 299.5, una talla que se a, puedo definir chica. Un color, puedo decir que sea gris, y un corte, puedo decir que sea de tipo polo. Esa es una Playera. Y ahora, para unos jeans, puedo colocar unos jeans. New jeans, tambin le coloco un Id por ejemplo el Id dos. Puedo colocarle un precio, un precio para unos jean s podemos decir que sean 799. Una talla que sea, una talla, 32. Un color, podemos decir que sea color azul. Para el corte de unos jeans podemos tener skin ny y el gnero podemos decir que sea femenino. Gnero femenino. Ahora por ltimo, nos falta un calcetn. Un c alcetn. Podramos poner igual a new. Y lo mismo podra tener el id tres. Unos calceti nes que podran ser unos 29. Una talla podramos poner talla m. Color podramos decir que sean rojos. Aqu ponemos punto y coma, listo, no olvides siempre los punto y c oma, son muy importantes en java. Bien, you he creado estos objetos, el objeto playera, el objeto jeans, el objeto calcetn. Y cada uno tiene su mnimo d e atributos para ser recreado. Ahora vamos a poner en prctica sto, vamos a decir pla yera.mostrarDatos, y le decimos que es una playera, una playera gris. Ahora vamos a jeans.mostrarDatos y le decimos que son unos jeans, azul, unos jeans de mujer. Y calcetin.mostrarDa tos, podemos decir que sea aqu calcetines. Calcetines, perfecto. Ahora, si correm os sto, qu nos aparecer? Pues todo lo que acabamos hacer, todo nuestro trabajo con la herencia. you tenemos un id, el precio, la talla, el color, para una playera gris de mujer. Precio, talla, color para los jeans de una mujer. Tambin los calcetines, precio, talla y color. Como observas en cada uno con su mtodo mostrar datos lo personaliz a su gusto. Entonces aqu vemos aplicado el polimorfismo. Bien, hemos visto varios conceptos. Hemos visto herenc ia sobreescritura de mtodos y polimorfismo. Hemos visto tambin nuestras palabras reservadas super, que hace referencia a la sper clase, y this que hace referencia a la clase donde ests ubicado. Nos vemos en el siguiente. [MUSIC]
Java para Principiantes - Instanciación de Una Clase - Referencia A Objeto - Métodos, Declaración de Métodos, Mensajes, Paso de Parámetros, Retorno de Valores, Constructores y Destructores