Transcript for:
Conceptos Clave sobre Herencia en Java

[Música] Hola y bienvenidos a este nuevo video del curso de Java en este video vamos a comenzar con un nuevo tema en programación orientado a objetos y se trata acerca de la herencia bien es un tema muy importante diría que es el más importante de los temas en programación orientado a objetos y qué es exactamente la herencia Bueno te voy a decir que la herencia es una forma de reutilización de software en la que se crea una nueva clase al absorber los miembros de una ya existente vamos desmenuzando poco a poco este concepto me dice la herencia es una forma de reutilización de software hasta Aquí más o menos qué idea Nos está dando Bueno nos está diciendo que ya no vamos a tener que copiar tanto código por qué porque vamos a reutilizar el código que ya tenemos en otras clases lo cual nos ahorraría muchísimo tiempo y muchísimo código claro nos dice además en la que se crea una nueva clase bueno se crea una nueva clase lo que significa que para herencia No puede haber solamente una clase sino que tienen que haber mínimo Dos clases y se crea una nueva clase al absorber los miembros de una clase ya existente Entonces nosotros tendríamos una clase verdad tú sabes bien que una clase tiene atributos y métodos bien y crearíamos otra clase heredando la de la primera y esta segunda clase heredaría los atributos y métodos de una clase ya existente entonces viéndolo de esa manera el concepto es bastante sencillo pero vamos a ver un ejemplo para que se nos haga aún más fácil mira Un ejemplo muy fácil y de la vida cotidiana claro nosotros vamos a crear una clase llamada persona bien Esta es nuestra clase persona Ahora vamos a ponerle atributos Qué te parece un nombre un apellido y una edad todas las personas tienen esos tres atributos verdad cada uno con su tipo de dato String Stream para nombre y apellido y entero para edad ahora en los métodos vamos a tener primero el constructor de la clase persona donde inicializar yamos los tres atributos después vamos a tener métodos getters para cada uno de los atributos de la clase persona hasta ahí bien como ves Esta es nuestra clase Ahora si te estás preguntando Qué cosas son estos más Bueno estamos indicándole así que esos métodos son de tipo públicos Okay recuerdas que cuando te dije que estos menos significaban que eran privados bueno los más son de tipo públicos Okay Esta es nuestra clase verdad personas con sus atributos y métodos bien ahora cómo heredamos una clase a través de la clase persona pues sencillo Mira nosotros vamos a crear una nueva clase llamada estudiante y como ves estudiante hereda los datos de persona mira nombre apellido y edad están aquí nombre apellido y edad y los métodos también y tenemos todos los getters aquí Entonces qué cosa es la herencia bueno la herencia es reutilización de código como ves aquí ya no crearíamos en el código el nombre el apellido la edad sino que ya lo tomaría directamente de la clase persona nos ahorraríamos bastante código y además esta clase estudiante aparte de tener los atributos que hereda de la clase persona pueda tener atributos y métodos extra como es en este caso como ves tenemos el código de estudiante y la nota final de este son atributos extra que ya no los esté heredando sino que tiene sus propios atributos y además en métodos Tenemos uno para Mostrar datos Y claro el método constructor de estudiante como ves esto de aquí es podría decirse una herencia se se grafica como una generalización con esta símbolo de flechita abierta entonces a la clase persona se le podría denominar clase padre o superclase y a la clase Estudiante se le podría denominar clase hija O subclase si nos damos cuenta eso tiene bastante sentido verdad persona sería nuestra clase padre y estudiante sería nuestra clase hijja estudiante hereda los datos de persona y además puede tener datos extra s sencillo además ahora te estarás preguntando Cómo me puedo guiar exactamente y saber qué clase hereda de tal clase y no confundirme en eso bueno sencillo tú tienes que guiarte por esta pequeña frasecita es un bien Este es un o es una te va a guiar para saber qué clase hereda de qué clase y no al contrario por ejemplo podríamos decir aquí que un estudiante es una persona eso es 100% seguro verdad todos los estudiantes son personas un estudiante es una persona pero una persona es un estudiante bueno No necesariamente Hay muchísimas personas y no todas de ellas son estudiantes verdad Entonces guiándonos de esto es un podemos deducir que estudiante heredaría de persona y no al contrario Bueno entonces esto como ejemplo verdad tenemos nuestra clase persona y nuestra clase estudiante estudiante heredad de persona Ahora esto es a nivel gráfico nada más con el diagrama uml Pero qué te parece si lo vamos a hacer en Java para que veas también Cómo se puede hacer en código Vámonos hacia net beins bien una vez aquí en netbeans he creado ya un proyecto llamado herencia programación orientada objetos he creado un paquete llamado herencia y he creado tres clases estudiante persona y principal bien Comencemos por la clase persona Aquí tengo ya las dos clases en un diagrama uml exactamente el mismo que estaba en la diapositivas para guiarnos bien en la clase persona me dice que tiene tres atributos nombre apellidos y edad los tres de tipo privado bien vamos a poner en persona el nombre bien nombre ahora vamos a poner aquí el apellido de la persona apellido Y por último la edad de la persona que es un dato de tipo entero Esos son los atributos de mi clase persona Ahora Cuáles son los métodos primero el constructor inicializando cada uno de los atributos bien y después métodos getters para cada uno de los atributos Okay genial Entonces vamos a hacer que el mismo netb nos lo genere para ahorrar tiempo en el video insertamos código constructor y le decimos que nos genere un constructor inicializando los tres atributos que tiene la clase lo generamos bien ya tenemos el constructor Ahora sí vamos a insertar los getters Okay que nos genere un getter para cada atributo lo generamos bien ya tenemos como ves nuestra clase persona completa bien tanto atributos y métodos muy bien Ahora vamos hacia clase estudiante y bien aquí está clase estudiante sencillo como es Ahí está clase estudiante Pero antes de empezar a digitar todo nosotros tenemos que indicarle a Java que estudiante es una clase hija de la clase persona bien hereda de la clase persona y cómo le decimos eso Exactamente Bueno aquí mismo bien aquí mismo donde dice public Class estudiante vamos a agregar lo siguiente esta palabrita extends bien que como ves se marca en azul porque es una palabra reservada de lenguaje extend extends qué mira aquí le estamos diciendo sabes qué Java estudiante hereda pero de qué hereda hereda de la clase persona muy bien Bueno aquí me está marcando un error porque falta crear el constructor de estudiante lo vamos a ver en un momento Entonces Recuerda siempre Poner este extens esta palabrita con esto Java ya se guía le estás diciendo estudiante hereda de persona okay Por lo tanto Java ya sabe que esta clase estudiante va a heredar todos los atributos y métodos de la clase persona bien ya seguía solito Ahora sí Recuerda este estudiante ya tiene como suyo los atributos de persona porque ya los heredó ahora nombre apellido y edad ya los tiene no hace falta que yo cree atributos extra porque ya los tiene en esto me refería hace un momento cuando te decía reutilización de código ya no hace falta copiar código de más sino que ya lo halal automáticamente ahora ya tengo tres atributos pero me faltan agregar dos que son extra que son solamente de esta clase estudiante Cómo es el código de estudiante y la nota final as que vamos a poner acá bien de tipo privado código de estudiante bien código de estudiante y la nota final bien vamos a poner la nota final de tipo float nota final muy bien aquí yo ya tengo como ves dos atributos y ahora sí vamos a los métodos en los métodos yo tengo que crear el constructor de estudiante Mira podríamos hacer que Java nos lo genere y lo haría correctamente pero me parece mejor idea hacerlo nosotros mismos para que te vayas guiando qué es lo que cambia bien porque el constructor de una clase hija o una clase que ha heredado de otra No es igual que una clase que no heredar De nada Como ves persona es una clase normal pero estudiante y tendríamos que crear un constructor especial Porque este estudiante es una clase hija Entonces vamos a hacer lo siguiente vamos a poner acá public bien estudiante bien estudiante y listo bien Ahora qué parámetros debería llevar este estudiante recuerda este estudiante ya está heredando todos los atributos de la clase persona por lo tanto yo debo ponerle el nombre el apellido y la edad muy bien aquí el nombre el apellido bien apellido y la edad que son de la clase persona y además esta clase estudiante tiene atributos extra como es el código de estudiante y la nota final así que vamos a ponerle aquí código de estudiante y además la nota final muy bien a aquí yo ya tendría mi todos los parámetros completos y ahora sí Recuerda que en nuestra clase persona nosotros ya tenemos un constructor con lo cual ya hemos inicializado tres atributos los atributos de esta clase por supuesto nombre apellido y edad por lo tanto yo ya no debo volver a inicializar losos porque ya están inicializados Así que simplemente debo decirle a Java con esta palabrita s decirle sabes qué amigo Java el nombre el apellido y la edad ya están inicializados bien como ves ahora ya se me desmarca el error porque nombre apellido y edad ya están inicializados dentro de mi clase persona así que yo no hace falta que lo inicializa de nuevo ahora lo que sí falta inicializar es estos dos atributos extra que tiene estudiante Así que vamos a poner acá ti. código de estudiante va a ser igual a código estudiante bien y además ts.to nota final va a ser igual a nota final del estudiante y bien como ves ahí ya se me han desmarcado todos los errores y y este ya sería el constructor bien constructor de mi clase estudiante como ves inicializando O ponemos perdón en los parámetros los atributos tanto de la clase estudiante como los atributos que ha heredado bien y los atributos que ha heredado ya están inicializados Así que solamente tendríamos que poner s e indicarle Cuáles atributos ya están inicializados o cuáles atributos heredado de otra clase y después inicializo los atributos que son netamente de esta bien hasta ahí genial como ves ya tenemos Aquí y ahora los métodos getter get nombre get apellido y get edad no hace falta ponerlo porque ya los hereda ya los tiene estudiante esos métodos Así que vamos al siguiente me dice Mostrar datos bien que es un de tipo void así que vamos a poner acá public void Mostrar datos muy bien y este Mostrar datos nos va a servir de mucho para darnos cuenta de lo siguiente Mira vamos a imprimir aquí mostrando los datos del estudiante recuerda el estudiante tiene el nombre apellido Le da del Código de estudiante y la nota final cinco datos vamos a poner uno por uno bien primero el nombre del estudiante ahora si nosotros queremos poner un nombre qué se nos ocurriría o cómo podríamos poner el nombre del estudiante Recuerda que te dije que como eh estudiante era una clase hija de persona ya heredaba todos los atributos y métodos cierto Sí pero tienes que tener en cuenta esto Mira si nosotros le ponemos acá nombre directamente como ves no sale un un error Y por qué no sale un error estarás pensando Oye todos los atributos de persona Ya están heredados en estudiante Por qué me saldría error Por qué no me reconoce este nombre bueno y hay que tener en cuenta los modificadores de acceso como ves el nombre el apellido y la edad tienen el modificador de acceso private privados están encapsulados totalmente el privado o el modificador de acceso private Recuerda que hacía que los atributos o los miembros que estén de tipo private solamente puedan ser accedidos por métodos de la misma clase Okay entonces nombre apellido y edad solamente pueden ser accedidos por la misma clase Entonces cuando yo me voy a estudiante y Quiero llamar a mi atributo nombre no puedo porque no pertenece a esa clase entonces podemos hacer dos cosas o podemos utilizar los getters que para eso lo hemos creado o podemos cambiar este modificador de acceso que ya no sea private sino que ahora sea protected bien como ves protected ahí se pintó en en azulito Y por qué exactamente este protected Mira vamos aquí guardamos y como ves ahora sí ya se me ha quitado el error Por qué lo que pasa es que este modificador de acceso protected lo que hace es que ya no solamente serán privados para la clase sino que ahora pueden ser accedidos por los miembros de la clase y además por los miembros de las clases hijas de esta Entonces el atributo nombre ya no es priv ahora es protected por lo tanto ya no solamente puede ser accedido por la clase persona sino que también por los hijos de esta Y recuerda que estudiante era una clase hijja de persona así que podemos utilizarlo Aquí bien Ahora si nosotros queremos imprimir lo siguiente simplemente Aquí vamos a imprimir la el apellido bien apellido y ahora para el apellido si nosotros queremos poner aquí por ejemplo apellido comoo ves nos sale un error nuevamente nos está indicando Oye amigo apellido es un dato de tipo privado tú no puedes utilizarlo en otra clase porque solamente lo puedes utilizar en esta Así que o lo dejamos en privado o lo cambiamos a protected bien con lo cual si nos vamos aquí guardamos como ves ahora si se nos desaparece el error porque como es protected puede ser utilizado en la misma clase o por los por las hijas de esta clase bien pero para mantener el encapsulamiento de manera correcta vamos a dejarlo aquí con el private Okay ambos ambos private ente que era importante que te explicara eso de los modificadores de acceso protected bien Ahora que ya lo sabes y como ves bastante sencillo su concepto vamos a poner y como lo hemos quitado ese protect hemos puesto private Y nuevamente nos vuelve a salir error no hay problema vamos a Borrar toda esta parte de aquí bien y vamos a utilizar los getters bien porque recuerda los getters get nombre get apellido y get edad lo hemos creado por algo no están de adorno Así que vamos a utilizarlos vamos a poner aquí lo siguiente para imprimir el nombre pues sencillo ponemos aquí get nombre que Recuerda que como estudiante es una clase que hereda de persona ya hereda todos sus atributos y métodos get nombre get apellido y get edad ya pertenecen a estudiante con lo cual como ves puedo utilizarlo directamente y no me sale ningún error ahora vamos a poner lo siguiente vamos a imprimir el apellido bien y ponemos acá get apellido bien get apellido ahora vamos a seguir y vamos a poner lo que es la edad y vamos a poner el get edad bien que aquí está ahora sí ya hemos terminado de poner los datos de la clase persona que también pertenecen estudiante Claro pero ahora vamos a poner los atributos que solamente pertenecen estudiante que es el código de estudiante y nota final así que vamos a poner aquí el código del estudiante estudiante y no hace falta poner getters porque como es de la misma clase podemos ponerlo directo código estudiante y además me faltaría poner la nota final bien nota final y esto sería igual a nota final el atributo bien ya tenemos nuestra clase Mostrar datos como ves bastante sencillo Ahora sí nos vamos hacia la clase principal ya hemos terminado con todo nuestra clase estudiante fácil ahora vamos hacia principal y lo que vamos a hacer en principal es algo Bastante cortito como este video nos está quedando un poquito largo vamos a hacerlo de una manera sencilla Mira vamos a crear aquí un objeto de la clase estudiante le voy a poner de nombre estudiante normal y vamos a poner un nuevo estudiante bien y voy a inicializar aquí todos los datos Recuerda que es el nombre el apellido y le edad al inicio luego el código del estudiante y la nota final vamos por el nombre voy a poner simplemente mis datos para que sea más rápido bien y no estar inventándome los nombres vamos a poner aquí la edad después de la edad venía lo que era el código de estudiante que era un entero Vamos a ponerle 123 Y por último venía la nota final que era un flotante Vamos a ponerle 15 pun 6f porque es flotante bien y punto y coma y ahora que hemos terminado de poner todos los parámetros necesarios para inicializar un objeto estudiante Pues ahora vamos a hacer lo siguiente estudiante punto Mostrar datos bien punto y coma Ya está ahora si nosotros ejecutamos esto vamos a ver qué es lo que nos sale como ves nos sale tanto el nombre el apellido la edad el código y la nota final del estudiante que le habíamos puesto bien como ves este simplemente es un programa sencillito es la primera el primer acercamiento que tienes hacia la herencia en programación conecta de objetos como V todo se basa muy Sencillamente en que tú vas a crear una clase y luego para crear otra clase si lo pones aquí que hereda de la clase persona como en este caso hemos creado la clase estudiante lo hemos puesto que hereda de la clase persona ya está tomando directamente todos los atributos y métodos de esta clase pero claro teniendo en cuenta los modificadores de acceso de esta También bien Espero que este video te haya gustado es un pequeño ejemplo nada más de herencia Y recuerda que si puedes imaginar puedes programarlo nos vemos en el próximo video del curso de Java hasta luego