Veamos el tema constructores, porque bien importante poder pasar parámetro, por ejemplo, de la clase
hija a la clase padre.
Pero vamos a partir desde cero, desde el principio.
Bueno, por defecto todavía no tenemos ningún constructor, ni siquiera uno vacío ya, pero por detrás
de escena.
Obviamente cada clase, por ejemplo alumno, profesor, tiene su constructor vacío y de forma automática
también llama al constructor vacío del padre.
Acá tenemos alumno, aunque no se vea, el constructor lo tiene y persona también, también lo tiene.
Entonces, какие se invoca una instancia de alumno?
Una vez que se invoca el constructor de alumno automáticamente llama al constructor del padre para poder
inicializar.
Veamos entonces la idea esta clase implementar constructores vacío y personalizarlo de forma explícita.
Después vamos a ver el tema de los parámetros cómo pasar el nombre Lapido y así.
Y también, por supuesto, puede reutilizar los constructores del padre.
Entonces public recuerden que el constructor tiene que ser public para que podamos instanciar o por
último default.
Pero si está en otro package, el default no va a funcionar.
Mismo nombre que la clase.
Listo.
Ahí tenemos.
Entonces vamos a tener un shout solamente para el ejemplo persona do punto inicializado.
Constructor.
Perfecto.
Vamos, alumno, vamos a tener lo mismo.
Un constructor vacío por defecto.
Pro-fesor.
Y por último, alumno internacional.
Perfecto, entonces básicamente tenemos lo mismo, pero de forma explícita y con algún mensaje para
que lo podamos ir visualizando en el terminal.
Entonces ahora nos vamos a ejemplo herencia y para poder dar una separación, porque cree que se crea,
por ejemplo, una instancia, una referencia en alumno bueno, va a invocar el constructor del alumno,
pero a su vez el constructor del alumno, aunque no se vea acá de forma implícita automática, va a
invocar el constructor de persona, aunque no se ve ya, pero lo va a hacer y así cada uno.
Entonces la idea es por acá dar una separación nada más.
Shout.
Por ejemplo, eso
la instancia objeto de alumno.
Y así por cada uno, entonces también.
Acá agregué faltó uno porque sea igual de bien, bajamos, profesor.
Y por último, nada más.
Bueno, quizá acá para dar una separación.
Bien, levantemos, vamos a revisar.
Equili derecho el Rann.
Veamos, al principio se fijan creando la instancia de clase.
Alumno primero persona inicializado constructor, después alumno inicializa constructor.
Entonces se cae que se crea la instancia de alumno.
Entonces, lo primero que hace antes incluso de imprimir esto, lo que hace llamar al constructor del
padre, inicializa el padre.
Se fijan, entonces se imprime.
Persona inicializado, constructor.
Es muy importante tener estos conceptos.
Claro que los constructores se van encadenando.
Las llamadas se fijan cuando tenemos constructor vacío, está perfecto.
Ahora bien, también se puede invocar de forma explícita.
Por ejemplo, si nos vamos alumno acá simplemente con shuper.
Entonces con la palabra clave shuper lo que hago es invocar el constructor del padre y siempre el super
o la llamada de un constructor del padre.
En una clase hija tiene girarte que cualquier instrucción siempre en la primera línea del constructor
primera sentencia.
Porque por ejemplo, qué pasa si corto esto y lo invoco?
Acá me marco un error y acá lo dice muy claro llamar a Shuper debe ser la primera sentencia en el cuerpo
de constructor, es decir, él lo primero que se invoca.
Entonces, recuerden, acá hay ta de forma explícita, pero también si se omite, va a llamar por defecto
al constructo del padre, pero el constructor vacío, en este caso sin parámetros.
Ahora cuidado, porque si el padre no tuviera un constructor vacío, daría un error solamente modo ejemplo.
Bueno, si comento esto está bien, porque por defecto va a tener un constructor vacío.
Se fijan independiente que acá lo tenga.
El dijo de forma explícita tanto alumno como profesor, bueno, alumno internacional que es hijo de
alumno, pero acá invoca el constructor vacío del padre, el constructor implícito.
Se fijan porque te comentaba.
Ahora bien, qué pasa si lo comento y tuviera un constructor con parámetros, con argumentos?
Aunque después vamos a ver más en detalle.
Pero por ejemplo, ya voy a modificar este ya.
De hecho, no es necesario que lo hagan todavía, porque después vamos a ver más en detalle.
Pero por ejemplo, estric nombre turalmente que recibe un nombre perfecto eita automáticamente acá debería
aparecer un error.
Fíjense que cuando el padre implementa un constructor con parámetro, ya deja de tener un constructor
por defecto.
Ahora el constructor por defecto es éste.
Este de acá ya no tiene un constructor vacío a menos que lo sobrecargue.
Es decir, que implemente otro constructor vacío sin parámetro.
Se fijan entonces acá como solución.
Como el padre ya no tiene un constructor vacío, entonces acá tenemos que utilizar el constructor compatible
del padre.
Por ejemplo, super y acá pasar el nombre se fijan un string por lo menos.
Aunque no es lo ideal porque lo ideal acá.
Es al menos que el constructor del hijo sea compatible o similar al constructor del padre.
Es decir, que el hijo recibe el nombre, por ejemplo, no es necesario que hagan esto solamente para
el ejemplo.
Entonces ahora acá se fijan perdón.
Acá.
Ahora, claro.
AL1 Internacional, obviamente del error.
Porque recuerden que el 1 internacional llama al conductor del padre que es alumno pero alumno tampoco
tiene conductor vacío.
Entonces, de forma jerárquica, acá también tendré que inicializar el nombre.
Ahora bien, como explicaba otra solución.
Sería que el padre, de forma explícita también tenga el constructor vacío,
es decir, que no haga nada, se fijan entonces bueno, al 1 también tendría para que 1 internacional
no dé error y pueda invocar este constructor vacío por defecto.
Yei, deja de dar error acá.
Se fijan porque ya lo tiene por defecto.
De hecho, voy a cambiar un poco el ejemplo.
Persona lo dejo tal cual, un constructor vacío y con parámetro voy alumno, voy a quitar el constructor
vacío.
Voy a quitar el súper.
Se fijan y hoy no me da error.
Porque el padre tiene el conductor vacío.
Entonces se invoca de forma automática acá.
El error está en almente.
El error está acá, incluso acá.
Podría quitar este para que no me de error acá.
Entonces es muy importante tener claro este concepto de los constructores y los parámetros.
Entonces, para que el hijo pueda invocar un constructor con shuper del padre, ya sea de forma automática,
vacío, implícito o de forma ilicito con parámetros, tiene que ser compatible.
Es decir, el padre tiene que tener ese constructor.
Bien, continuamos la siguiente clase con constructores pasando parámetros a antes que se olvida esto
de acá.
La idea que tuviera acá.
Perfecto.
Bien, esto lo voy a quitar por ahora.
La otra clase.
Trabajamos con parámetros.
Nos vemos.