20251209 POO_paquetes_1 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Venga, a ver, pues el otro día, a partir de esta aplicación que corregimos, de esta de cuenta, ¿verdad?, de esta de aquí, bueno, pues aunque parecía una chorrada, pues sacamos varias cosas.
00:00:00
Entre ellas incorporamos el concepto de método constructor, ¿verdad?, que es un método especial.
00:00:16
No funciona como el resto de métodos que siguen todos la misma regla. El nombre que ahí me dé la gana, lo más explicativo posible y con minúscula esto por cuestión de estilo, no por obligación.
00:00:27
parámetros que usa el método
00:00:40
que es toda esa información
00:00:43
que el método necesita para trabajar
00:00:44
que no está dentro
00:00:47
del objeto que lo llama
00:00:48
porque lo que está dentro del objeto que lo llama
00:00:50
está ahí y puede acceder
00:00:52
directamente
00:00:54
y luego ya el método
00:00:55
opera, hace lo que le da la gana
00:00:58
con esos parámetros que ha recibido de fuera
00:01:00
que tendrán la información adicional de fuera
00:01:02
y con
00:01:04
las propiedades del objeto que lo llama
00:01:06
opera, hace lo que sea
00:01:08
y eso puede ser
00:01:09
mostrar por consola, conectarse a una base de datos
00:01:11
cualquier cosa y puede ser que
00:01:13
además
00:01:15
entregue, mande
00:01:16
al exterior, lance al exterior
00:01:19
un único valor
00:01:21
si eso ocurre tendrá que haber un retune
00:01:22
con ese valor que lanza al exterior
00:01:25
y aquí el tipo de dato
00:01:27
del valor lanzado
00:01:29
si no lanza nada al exterior
00:01:31
un void
00:01:33
y luego ya como llamamos a ese método
00:01:33
Pues ya lo sabemos, ¿cómo llevamos a ese método? Pues con su nombre y pasándole tantos parámetros ya concretos, valores concretos, en este caso el valor concreto leído por consola, pasándole tantos parámetros como necesite.
00:01:37
y luego el valor de retorno
00:01:53
si lo tuviera
00:01:55
lo uso yo para lo que quiera
00:01:56
para asignarle una variable
00:01:58
en este caso igual de para asignarle una variable
00:02:00
lo uso para concatenar
00:02:03
para lo que quiera ese valor de retorno
00:02:04
si lo quiero usar lo uso para lo que quiera
00:02:06
y si no lo quiero usar
00:02:09
llamo al método sin más y lo tiro a la basura
00:02:10
no pasa nada
00:02:13
entonces el constructor
00:02:13
era un método especial porque
00:02:18
su nombre es obligatoriamente
00:02:20
el de la clase
00:02:23
mayúscula incluida
00:02:24
no devuelve nada
00:02:27
pero ni siquiera se especifica con void
00:02:30
no devuelve nada
00:02:32
recibe los parámetros que uno quiera
00:02:33
y puede tener varias versiones
00:02:36
esta versión sin parámetros
00:02:37
esta que tiene dos
00:02:39
puede tener todas las versiones que quiera
00:02:41
y
00:02:43
cuando se llama este método
00:02:45
se le llama en un momento concreto
00:02:47
y solo en ese, no se le puede llamar
00:02:49
cuando uno quiera en cualquier otro momento, no solo en ese
00:02:51
se le llama automáticamente
00:02:53
la máquina virtual lo llama
00:02:56
cuando se crea el objeto con el new
00:02:57
ahí se le llama
00:03:00
¿y qué parámetros recibe el método?
00:03:01
los que vayan en los paréntesis
00:03:04
entonces
00:03:05
si yo estoy llamando a este
00:03:07
como este recibe un string
00:03:09
y un double
00:03:11
pues la máquina virtual no tiene duda
00:03:13
de que al que se está llamando
00:03:15
es al que recibe un string y un double
00:03:16
no tiene duda
00:03:18
pero si estoy llamando a este
00:03:19
que no recibe nada, entonces no tiene duda
00:03:22
del que tiene que invocar es este
00:03:25
porque no recibe nada
00:03:26
que yo llamo
00:03:28
a uno
00:03:31
aquí
00:03:31
llamo a uno con otro parámetro
00:03:33
además, con el número 7
00:03:36
el compilador me dirá, oye
00:03:38
no hay ningún constructor
00:03:40
preparado para recibir
00:03:42
un string, un double
00:03:44
y un int, no lo hay
00:03:46
no lo hay, entonces me da error
00:03:48
y efectivamente no lo hay
00:03:50
yo solo tengo constructores preparados
00:03:51
para recibir
00:03:54
nada
00:03:54
o para recibir un string
00:03:56
o un double, solo tengo constructores preparados para eso
00:04:00
entonces solamente
00:04:02
puedo instanciar objetos
00:04:03
o con esta variante o con esta otra
00:04:05
no con otras
00:04:08
¿vale?
00:04:09
bueno
00:04:12
¿está claro? ¿hasta ahí?
00:04:13
sí
00:04:16
muy bien, bueno pues ya llega el momento
00:04:16
podemos ya posponerlo más
00:04:20
vamos a tener ya
00:04:21
que enfrentarnos a los public
00:04:24
estos que siempre
00:04:26
quitamos, ponemos, que no sabemos ni por qué
00:04:28
se ponen, ya tenemos
00:04:30
que enfrentarnos ya cuando ya tenemos
00:04:32
varias clases, que es nuestro caso, ahora ya
00:04:34
nuestros ejercicios tienen varias clases
00:04:36
no solo una, ahora ya
00:04:38
sí que sí, lo del public, private
00:04:40
etcétera, podemos jugar con ello
00:04:42
ahora ya sí, cuando tenemos varias
00:04:44
vale, pues vamos a ver
00:04:46
un poquito qué significa eso
00:04:48
y luego cómo lo
00:04:50
lo usamos
00:04:52
vale
00:04:54
pues
00:04:59
esto
00:04:59
¿dónde está el roto?
00:05:02
bueno, pues ahora ya sí
00:05:18
que sabemos que una aplicación
00:05:18
¿verdad?
00:05:20
una aplicación en Java, ¿qué es?
00:05:22
es un montón de clases
00:05:25
un conjunto de clases, ¿verdad?
00:05:26
la aplicación que hemos hecho en el ejercicio
00:05:37
11, tiene
00:05:38
la clase cuenta
00:05:40
que representa el concepto
00:05:41
cuenta con las cosas que puede
00:05:44
hacer, ¿vale?
00:05:46
Representa el concepto cuenta como su
00:05:48
cantidad
00:05:50
y titular
00:05:52
y además tiene las cosas
00:05:53
que puede hacer como recibir dinero
00:05:56
en un ingreso, soltar dinero
00:05:58
en una retirada, pues tiene la clase
00:06:00
cuenta y luego además tiene la clase
00:06:02
main, la clase que llamamos la clase principal
00:06:04
porque de este conjunto de clases
00:06:06
si la aplicación es de escritorio y queremos ejecutarla en un ordenador
00:06:09
una será la principal
00:06:12
es decir, la que tiene el método main
00:06:16
la que tiene el main
00:06:19
y ahora cuando lanzamos esa aplicación
00:06:22
la máquina virtual
00:06:26
se va a buscar ese main
00:06:28
y empieza a ejecutar desde ese main
00:06:31
y ahora ya ese main
00:06:37
pues crea objetos de las clases que sea
00:06:38
¿vale? eso es como hemos trabajado hasta ahora
00:06:41
crea objetos de las clases que sea
00:06:43
en el ejercicio 11
00:06:45
este main creaba
00:06:46
un objeto cuenta y con ese objeto cuenta
00:06:49
hacía retiradas, ingresos
00:06:51
¿vale? conclusión
00:06:53
una aplicación son muchas clases
00:06:54
¿vale?
00:06:57
pueden ser 2, 3 o 100.000
00:06:59
entonces si son 100.000
00:07:01
vamos a meter
00:07:03
un poquito de organización
00:07:05
porque si son 100.000 y me dicen
00:07:06
oye, retoca la clase usuario
00:07:08
porque al usuario ahora le hemos metido
00:07:10
su dirección
00:07:13
de correo electrónico.
00:07:15
Madre de Dios, tienes todavía mil clases
00:07:16
hasta que encuentras a tu usuario.
00:07:18
Cuando ya tenemos muchas, vamos a
00:07:20
organizarlas un poquito para que
00:07:22
a la hora de retocar la aplicación me sea más fácil
00:07:24
encontrar la clase que estoy
00:07:26
buscando.
00:07:28
Bueno, pues ¿cómo
00:07:30
organizamos las clases?
00:07:32
Las organizamos en paquetes, ¿verdad?
00:07:34
Entonces, una aplicación normal son varias clases
00:07:50
Si son poquitas, podría tenerlas todas en el mismo paquete
00:07:54
Pero si son muchas clases, lo normal es que las tengan paquetes separados
00:07:59
¿Vale? Entonces, cada paquete es una carpeta de clases
00:08:03
¿Vale? Cada paquete es una carpeta con clases
00:08:08
Vale, bueno pues mi aplicación, mi aplicación de gestión de facturas, mi aplicación de gestión de matrículas, mi aplicación de usuarios, la que sea, mi aplicación de inventario, pues mi aplicación tendrá varios paquetes o lo que es lo mismo, varias carpetas y cada carpeta tendrá unas cuantas clases y todas ellas serán la aplicación.
00:08:12
y de todas ellas, una y solo una
00:08:45
debería tener
00:08:48
este método
00:08:50
de tal manera que cuando la aplicación se arranque
00:08:51
el punto de arranque
00:08:54
es este
00:08:56
y a partir de ahí ya
00:08:57
se empiezan a crear objetos de otras clases
00:08:59
que llaman a métodos, babababa
00:09:02
todo lo que sea
00:09:04
bueno, está ahí claro, ¿no?
00:09:05
o sea, cada paquete tiene que tener un main
00:09:07
no, la aplicación
00:09:09
tiene un único main, que estará en uno
00:09:11
de los paquetes en el que sea
00:09:13
Un main por aplicación
00:09:14
Porque la aplicación tiene que arrancar en un punto
00:09:18
Y va a arrancar en ese main
00:09:21
En ese único main
00:09:22
O sea, ahora lo que estamos haciendo nosotros no sería
00:09:24
Sería un proyecto con un main
00:09:26
Sí, a ver, lo que pasa es que
00:09:29
Como estamos haciendo
00:09:30
Para no tener miles de proyectos
00:09:31
Para cada ejercicio
00:09:34
Pues estamos metiendo en un único proyecto
00:09:35
Varios ejercicios
00:09:38
Y entonces por eso hay varios main
00:09:40
Pero es que cada main es una aplicación distinta
00:09:41
cada mail es un ejercicio distinto
00:09:44
lo que es una aplicación distinta
00:09:47
entonces asociamos mail a aplicación
00:09:48
entonces ya no solo estará el mail
00:09:50
sino el resto de clases
00:09:52
que se empiezan a instanciar
00:09:54
desde el mail
00:09:57
bueno, pues entonces
00:09:58
ahora yo tengo una aplicación cualquiera
00:10:02
pues imaginaos que tengo
00:10:03
una aplicación, pues yo que sé
00:10:05
de gestión de usuarios
00:10:07
por poner algo, da lo mismo
00:10:09
vale, pues esta aplicación
00:10:11
después de analizarla, tiene, ¿con qué entidades trabaja?
00:10:18
Pues trabaja con la entidad usuario, que tiene sus datos DNI,
00:10:22
pues entonces habla una clase usuario.
00:10:26
Vale, pues aquí tengo mi clase usuario.
00:10:29
A lo mejor me interesa también una clase que es la clase,
00:10:33
por ejemplo, el usuario se caracteriza por su documento,
00:10:39
pero el documento tiene varias cosas.
00:10:42
la ubicación donde está la foto
00:10:44
un string, pues a lo mejor
00:10:47
tengo mi clase documento
00:10:49
vale
00:10:54
ahora tengo
00:10:56
dentro de la clase usuario
00:10:58
entonces habrá una propiedad que será de tipo documento
00:11:00
da igual, a lo mejor tengo
00:11:02
también ahora una clase de utilidades
00:11:04
que es
00:11:06
la clase que tiene
00:11:08
los métodos
00:11:10
pues yo que sé, utilidades
00:11:13
de entrada y salida, por ejemplo
00:11:18
para
00:11:20
hacer la entrada y salida de datos
00:11:21
pues lo meto en esa clase
00:11:24
luego tengo la clase
00:11:25
que tiene el método main
00:11:29
pues por ejemplo esa podría ser la clase main
00:11:31
y así podría tener muchas
00:11:33
así podría tener muchas
00:11:38
en una única aplicación, muchas
00:11:39
bueno, pues entonces vamos a dividirlas
00:11:41
en diferentes paquetes
00:11:45
pues por ejemplo, normalmente la división que se hace
00:11:46
es conceptual
00:11:49
cada paquete tiene clases
00:11:50
que se refieren
00:11:53
que tienen un significado común
00:11:55
de alguna manera
00:11:58
bueno, pues estas dos de aquí
00:11:58
¿vale?
00:12:01
pues estas
00:12:03
dos de aquí
00:12:04
por ejemplo, las puedo meter
00:12:07
en el paquete modelo
00:12:11
porque es el modelo de mi aplicación
00:12:13
¿vale?
00:12:17
a lo mejor
00:12:19
esta clase de aquí
00:12:21
la voy a meter en un paquete
00:12:22
que se llame utilidades
00:12:25
¿vale?
00:12:27
estos serían los paquetes
00:12:33
¿vale? esta clase de aquí como significa
00:12:40
otra cosa que es la clase principal
00:12:42
pues por ejemplo la voy a meter en el
00:12:44
paquete main
00:12:46
¿vale? tengo tres paquetes
00:12:47
bueno pues cada paquete es una carpeta
00:12:51
cada paquete es una carpetita
00:12:54
con el mismo nombre
00:12:58
¿vale? entonces lo que es mi aplicación
00:12:59
tendrá que tener físicamente
00:13:07
mi aplicación, una carpeta
00:13:09
que se llama modelo y aquí están
00:13:11
estas clases, otra
00:13:13
carpeta que se llama utilidades y ahí está
00:13:15
esa clase, otra carpeta
00:13:17
que se llama main y ahí está esa clase
00:13:19
luego cada paquete lo que
00:13:21
es físicamente es
00:13:23
una carpeta del sistema de archivos
00:13:25
con ese nombre
00:13:27
luego mi aplicación
00:13:28
es diferentes clases
00:13:30
distribuidas en
00:13:32
diferentes carpetas
00:13:34
vale, es necesario que sean todas carpetas
00:13:36
al mismo nivel? No, puedo tener
00:13:42
un árbol de carpetas
00:13:44
por ejemplo, a lo mejor yo tengo
00:13:45
dos clases de utilidades
00:13:48
y unas son específicas
00:13:50
de entrada y salida por consola, por ejemplo
00:13:52
entonces yo quiero una organización
00:13:54
en la que aquí me hago
00:13:56
una subcarpeta
00:13:58
que se llame
00:14:00
consola
00:14:02
entonces, ¿vale? esta carpeta
00:14:03
se llamaría utilidades
00:14:06
y dentro de utilidades me hago una
00:14:07
subcarpeta, una subcarpeta
00:14:11
que se llame, por ejemplo,
00:14:14
consola. Esta carpeta
00:14:16
está dentro de esta.
00:14:18
Tiene sentido esta organización
00:14:20
porque me hace un mapa real
00:14:21
de lo que significa cada cosa.
00:14:23
Estas serían las utilidades, bueno,
00:14:26
utilidades de entrada y salida.
00:14:27
Estas serían las utilidades de entrada y salida,
00:14:29
pero solo
00:14:32
las que van por consola.
00:14:33
Entonces, la meto yo, esas clases
00:14:36
en una carpetita ahí dentro.
00:14:38
¿Vale? Entonces,
00:14:40
Entonces, ¿aquí qué tendría?
00:14:41
Aquí tendría cuatro paquetes.
00:14:42
Tendría cuatro.
00:14:44
Este, un paquete.
00:14:46
Este, utilidades, otro.
00:14:48
Este, otro.
00:14:50
Y este, consola, otro.
00:14:52
Luego, tengo tantos paquetes como carpetas con clases.
00:14:55
Me da igual que unas estén dentro de otras.
00:15:01
Me da lo mismo.
00:15:03
Aquí tengo cuatro paquetes.
00:15:05
Este, este, este y este.
00:15:07
Porque tengo cuatro carpetas.
00:15:09
Aunque una esté dentro de otra.
00:15:11
Y todas ellas pueden tener clases.
00:15:12
Directamente en utilidades puedo tener yo clases dentro.
00:15:15
Pero dentro de la subcarpeta consola también puedo tener clases.
00:15:19
¿Vale?
00:15:24
Bueno, pues, ¿cómo sería el nombre de cada paquete?
00:15:26
Hemos dicho que el nombre de cada paquete es el nombre de la carpeta.
00:15:29
Pero, ¿qué pasa cuando es una subcarpeta?
00:15:32
Pues que el nombre del paquete va con prefijo.
00:15:34
El de estas modelos y más.
00:15:38
El de estas utilidades entrada y salida sin más.
00:15:41
El de estas main sin más.
00:15:46
Pero el nombre de este paquete.
00:15:48
Consola barra utilidades.
00:15:50
Utilidades punto consola.
00:15:53
Entonces el nombre de este paquete sería, si lo saco por aquí,
00:15:56
el nombre de este sería toda la ruta, pero con puntos en vez de con barra.
00:16:03
utilidades
00:16:09
entrada y salida
00:16:11
punto consola
00:16:14
con el punto
00:16:15
luego
00:16:18
lo que tengo físicamente
00:16:20
son carpetas y subcarpetas
00:16:21
pero eso para Java son paquetes
00:16:24
y para Java
00:16:28
el nombre que recibe
00:16:29
es el nombre de la carpeta
00:16:31
y si es subcarpeta
00:16:33
es decir, está una dentro de otra
00:16:35
pues toda la ruta
00:16:38
con el separador punto
00:16:39
si dentro de consola
00:16:41
a su vez me da a mí la gana
00:16:43
crear otro paquete
00:16:45
ahí dentro, otra carpeta con
00:16:47
clases que se llama de otra manera
00:16:49
llamémosle x
00:16:51
pues me ha aparecido un quinto paquete
00:16:52
y ese quinto paquete como se llamaría
00:16:54
utilidades.es
00:16:57
consola.x
00:16:59
luego tendría 5
00:17:00
tendría el paquete modelo, el paquete utilidades
00:17:02
el paquete main
00:17:05
el paquete utilidades.consola
00:17:06
y el paquete utilidades.consola.x
00:17:09
cinco paquetes
00:17:12
están organizados como carpetas unas dentro de otras
00:17:15
pero para Java le da igual
00:17:18
para Java son cinco paquetes de la misma categoría todos
00:17:20
cada uno con su nombre
00:17:24
algunos tendrán nombre largo porque está en subcarpetas
00:17:26
y otros nombre corto porque está en el raíz del proyecto
00:17:30
directamente, está en el raíz
00:17:33
en el raíz de la aplicación, lo que se llama el raíz
00:17:35
de la aplicación
00:17:38
pero que tenga el nombre largo o nombre corto
00:17:39
o lo que es lo mismo, que sean subcarpetas
00:17:42
o no, a Java le da
00:17:44
lo mismo, todos son
00:17:46
paquetes con clases dentro
00:17:48
de la misma categoría
00:17:50
y del mismo nivel, es decir
00:17:51
no es que un paquete esté dentro del otro
00:17:53
una carpeta sí está dentro de la otra
00:17:55
pero los paquetes no están
00:17:58
dentro del otro
00:18:00
para Java no está uno dentro del otro
00:18:00
son paquetes con clases
00:18:04
conceptualmente
00:18:05
cada una de las que sea
00:18:07
bueno pues ahora esto que implicación tiene
00:18:08
pues la implicación
00:18:13
que tiene es que
00:18:15
las clases
00:18:16
que están en cada paquete
00:18:18
ahora ya
00:18:20
tienen acceso
00:18:22
para instanciar objetos
00:18:25
o para lo que sea
00:18:27
a clases de otro paquete
00:18:28
en función de esos
00:18:30
modificadores que yo les ponga.
00:18:32
Public, private, no sé qué.
00:18:35
Entonces, esto ahora
00:18:37
vamos a verlo
00:18:38
con código
00:18:39
que es más fácil
00:18:41
de ver.
00:18:44
Vale, pues
00:18:51
en un proyectito aparte, aunque van a ser
00:18:53
cuatro chorradas, vamos a hacerlo en un proyectito aparte
00:19:02
para que se vea claro.
00:19:04
Y luego ya la misma idea la aplicaremos ahora ya
00:19:06
así en el resto de ejercicios.
00:19:08
Entonces,
00:19:11
Voy a hacerme yo un proyecto aparte para subirlo a la aula virtual como ejemplo.
00:19:12
Lo voy a llamar paquetes ejemplo.
00:19:24
Y aquí irán todo lo que tenemos que saber de modificadores de acceso, paquetes y demás.
00:19:31
Vale, pues entonces, esta es mi carpeta raíz.
00:19:40
Ahora vamos a ver realmente la estructura del sistema de archivos en que se mapea.
00:19:43
Yo aquí puedo meter clases sin más
00:19:47
Entonces las estaría metiendo todas en la raíz
00:19:51
Eso no se hace desde la versión Java de no sé qué
00:19:53
Porque la máquina virtual se va a liar
00:19:56
Para ti nada, eso ya nos olvidamos
00:19:58
Entonces las clases las vamos a meter siempre en paquetes
00:19:59
Pues por ejemplo, me voy a hacer un paquete modelo
00:20:02
Un primer paquete
00:20:05
Modelo
00:20:06
Que es el modelo general
00:20:11
Y aquí pues a lo mejor tengo yo mi clase alumno
00:20:14
Porque mi aplicación va a trabajar con alumnos
00:20:16
luego su modelo tiene un alumno
00:20:22
vale
00:20:24
le voy a
00:20:27
como todavía esto no sabemos lo que significa
00:20:29
no lo hemos mencionado, esto lo quito
00:20:32
vale, y el alumno va a tener
00:20:33
su nombre
00:20:35
como vamos a ver solamente el problema de los accesos
00:20:38
una propiedad y se acabó
00:20:41
su nombre
00:20:43
vale, no es obligatorio
00:20:43
poner constructores
00:20:47
porque de hecho hemos hecho los primeros ejercicios
00:20:48
sin hacer constructores
00:20:51
y luego nosotros podíamos crear
00:20:52
alumnos con new alumno.
00:20:54
¿Vale? Porque no hacer ningún
00:20:57
constructor equivale
00:20:58
para Java hacer
00:21:00
esto, como hacer uno por
00:21:02
defecto vacío.
00:21:04
Si yo no hago ningún constructor,
00:21:06
no lo escribo, se supone
00:21:08
que hay este por defecto.
00:21:10
Por eso podemos hacer el new alumno.
00:21:12
Lo hemos podido hacer sin hacer constructores
00:21:14
nosotros. Porque si no
00:21:16
escribimos ninguno, se supone que está este por
00:21:18
defecto. ¿Vale?
00:21:20
entonces ni lo escribo
00:21:22
vale, alumno
00:21:24
ahora
00:21:25
me voy a hacer pues otro paquete
00:21:27
este pues venga
00:21:29
utilidades
00:21:34
un paquete de utilidades
00:21:35
pues este paquete de utilidades de aquí
00:21:40
que tiene una clase
00:21:43
de utilidades para hacer cosas
00:21:46
un paquete de utilidades
00:21:47
para hacer cosas
00:21:57
vale
00:21:58
por ejemplo, pues que utilidad puede hacer
00:21:59
yo que sé, una utilidad que a lo mejor
00:22:03
me interesa, no sé por qué.
00:22:05
¿Vale?
00:22:09
Ver
00:22:12
si el nombre, le voy a quitar el public,
00:22:12
ver si
00:22:18
le paso un alumno
00:22:19
y me va a decir si su nombre empieza
00:22:21
por mayúscula. Por ejemplo, una utilidad
00:22:23
que mi aplicación necesita.
00:22:25
Pues vamos a hacer.
00:22:27
¿Esta aplicación no tiene propiedades?
00:22:29
Bueno, venga, para que tenga
00:22:36
propiedades sí, por ejemplo,
00:22:37
la aplicación se caracteriza
00:22:39
por su propiedad, una propiedad
00:22:41
para poner una propiedad por un char
00:22:43
vale, y
00:22:45
la utilidad que tiene esta aplicación es
00:22:52
ver si un alumno
00:22:54
que yo paso como parámetro, su inicial
00:22:56
es igual que este carácter
00:22:59
por alguna razón
00:23:00
le interesa a la aplicación esto
00:23:02
saber cosas de iniciales
00:23:04
pues nada, entonces este método como sería
00:23:06
me devuelvo un boolean
00:23:08
porque me tiene que devolver sí o no
00:23:09
el método es
00:23:12
empieza por
00:23:14
que hay que pasarle como parámetro
00:23:15
a este método para comparar
00:23:20
si su nombre empieza por este carácter.
00:23:21
El alumno.
00:23:25
El objeto enterito, no pasa nada.
00:23:29
Yo le paso...
00:23:32
Es decir, alumno
00:23:35
es un tipo de datos más
00:23:39
que me acabo de crear. Es un tipo de dato.
00:23:41
Entonces yo le puedo pasar
00:23:44
una variable de tipo alumno.
00:23:45
¿Y ahora qué tendría que hacer este método? Pues este método tendría que hacer retun o.nombre igual a carácter, ¿verdad? O.nombre charAt, perdón, o.nombre charAt cero.
00:23:47
pues si la inicial
00:24:07
del nombre del alumno
00:24:11
o punto nombres stream
00:24:13
la inicial del nombre del alumno
00:24:14
es igual al carácter
00:24:17
de mi clase utilidades
00:24:19
me va a devolver true y si no false
00:24:21
vale
00:24:23
pues esta clase
00:24:24
necesita usar a la otra
00:24:26
necesita usar a esta
00:24:28
pues aquí nos viene ya el primer problema
00:24:30
me da un error de compilación que no sé de dónde sale
00:24:32
vamos a ver de dónde sale
00:24:35
me dice, uy, lo siento, pero alumno
00:24:37
no lo veo, no lo encuentro por ninguna parte
00:24:41
decimos, pero bueno, pero si alumno, ¿cómo no lo vas a encontrar?
00:24:45
pero si yo lo he hecho, claro, pero es que
00:24:50
alumno está en otro paquete
00:24:54
entonces, está en otro distinto, pues para que
00:24:57
clases de otro paquete diferente al mío puedan
00:25:02
accederme a mí, tengo que poner el public, vale, primer paso, entonces vamos a ponerlo
00:25:06
aquí, vamos a subir ese proyecto, modificador public para la clase, vale, permite que clases
00:25:16
fuera del paquete
00:25:35
del paquete donde esté
00:25:36
clases fuera del paquete
00:25:38
puedan hacer referencia
00:25:40
a esa clase
00:25:43
a esa clase
00:25:44
si no se pone
00:25:47
el public, solamente
00:25:49
pueden hacer referencia a la clase
00:25:51
alumno, clases del mismo
00:25:53
paquete, ¿vale?
00:25:55
es decir, si yo aquí no le pongo
00:26:13
el public
00:26:17
no le pongo el public
00:26:18
¿vale? pero utilidades
00:26:20
está aquí, fijaos
00:26:24
aquí utilidades
00:26:32
en el mismo paquete, le acabo de subir al paquete
00:26:33
modelo, aquí no ha habido ningún
00:26:36
problema, porque está en el
00:26:38
mismo paquete, está en modelo
00:26:40
con lo cual, aunque alumno no tiene public
00:26:41
cualquier clase
00:26:44
de ese paquete puede hacer referencia a ella
00:26:46
pero en mi caso
00:26:48
anterior, que utilidades estaba en un
00:26:50
paquete aparte, porque a mi me interesa
00:26:52
yo quiero que esté en un paquete aparte
00:26:54
porque se organiza
00:26:55
pues me dice, perdona
00:26:58
Pero alumno, es que no sé ni quién es
00:27:00
Este import, no lo quiero
00:27:02
No
00:27:04
Me lo ha metido el suelo
00:27:05
Vale, este no lo quiero
00:27:07
O sea, perdón, este alumno, lo siento, no lo veo
00:27:09
Vale, pues primer paso
00:27:12
Ah, claro, ¿cómo lo vas a ver?
00:27:14
Primera cosa imprescindible
00:27:15
Public delante del class
00:27:17
Ahora ya
00:27:20
Hacemos el primer paso, y solo el primero
00:27:22
Para poder
00:27:24
Hacer referencia a esta clase
00:27:26
Vale
00:27:27
poniendo el public se me ha quitado el error
00:27:29
no, me sigue diciendo
00:27:32
alumno no lo conozco
00:27:34
¿por qué no lo conozco?
00:27:36
porque ahora ya sí que os digo la verdad
00:27:38
entera, que os hemos mentido
00:27:40
hasta ahora, alumno
00:27:42
no es el nombre de esta clase
00:27:44
en realidad
00:27:46
el nombre de esta clase tiene que llevar
00:27:46
como prefijo su package
00:27:50
entonces esta clase en realidad
00:27:52
se llama modelo
00:27:54
punto alumno
00:27:56
es como se llama de verdad
00:27:57
con lo cual
00:27:59
si yo pongo su nombre real
00:28:00
ahora ya se calla
00:28:02
ahora ya sí que lo encuentra
00:28:04
este error de aquí ya lo veremos luego
00:28:07
modelo.alumno
00:28:08
ningún problema
00:28:10
¿vale?
00:28:11
porque el nombre verdadero de la clase
00:28:14
es el del package
00:28:17
punto su clase
00:28:18
independientemente de cómo sea el package
00:28:20
imaginaos que yo me voy a hacer
00:28:25
tengo algunas entidades especiales
00:28:27
que quiero yo
00:28:30
que estén guardadas físicamente
00:28:32
en una subcarpeta de modelo
00:28:34
pues vamos a hacernos unas entidades especiales
00:28:35
y las vamos a meter
00:28:38
en un paquete, new package
00:28:40
modelo
00:28:42
punto especiales
00:28:43
vale, pues como veis
00:28:46
modelo especiales
00:28:51
es otra
00:28:52
es otra
00:28:53
es otro paquete
00:28:56
que está al mismo nivel
00:29:00
está exactamente al mismo nivel
00:29:01
que modelo y que utilidades, modelo especiales
00:29:06
exactamente al mismo
00:29:08
otro paquete con sus clases
00:29:10
lo que pasa es que
00:29:12
al llamarse modelo.especiales
00:29:14
físicamente
00:29:16
está guardada una subcarpeta de este
00:29:18
pero esa java le da igual
00:29:20
¿vale?
00:29:22
pero a nosotros, pues mira, nos gusta así porque visualmente
00:29:24
nos lo vemos mejor
00:29:26
si yo veo aquí modelo.especiales
00:29:28
veo que aquí van a ir
00:29:30
las clases especiales del modelo
00:29:32
es una cuestión
00:29:35
de claridad
00:29:36
mucho mejor
00:29:37
hacer modelo.especiales
00:29:40
que un paquete especiales y más
00:29:42
porque especiales, especiales de qué
00:29:43
sin embargo si veo modelo.especiales
00:29:45
son entidades especiales
00:29:48
es por una cuestión de claridad
00:29:49
del diseño
00:29:52
bueno pues ahora
00:29:52
efectivamente
00:29:54
si yo entrara
00:29:56
en la estructura de carpetas
00:29:58
de mi proyecto, si yo entrara
00:30:00
que podemos entrar con el show in
00:30:02
system explorer
00:30:04
entramos en la estructura de carpetas de mi
00:30:06
proyecto, que está aquí
00:30:08
efectivamente, ¿qué tengo?
00:30:10
tengo
00:30:13
modelo, carpeta modelo
00:30:14
carpeta utilidades
00:30:16
utilidades tienen
00:30:17
su clase
00:30:20
modelo tiene su clase
00:30:21
y además tiene la subcarpeta
00:30:24
especiales
00:30:26
que tendrá la clase que voy a hacer ahora
00:30:27
¿vale?
00:30:30
luego tengo tres paquetes con la peculiaridad
00:30:32
que da exactamente igual
00:30:34
de que una carpeta está dentro de la otra
00:30:35
y eso afecta al nombre
00:30:38
del paquete, ya está, al nombre
00:30:40
y le da claridad, nada más
00:30:42
bueno, pues imaginaos que modelo especial
00:30:43
vamos a meter ahora una clase
00:30:46
que sea
00:30:48
pues alumno
00:30:49
ciego, por ejemplo
00:30:52
Necesita adaptación visual. Pues el alumno ciego tendrá, como todos los alumnos, su nombre e imaginaos que tiene un grado, yo que sé, de discapacidad visual, pues su propiedad grado.
00:30:56
Vale, pues fijaos dónde está esta clase alumno ciego. Esta clase alumno ciego está en el paquete modelo.especiales.
00:31:16
¿qué significa eso?
00:31:23
que el verdadero nombre de la clase
00:31:25
el verdadero nombre
00:31:27
es modelo.especiales.alumnociego
00:31:28
por ejemplo
00:31:32
si en mi clase utilidades
00:31:35
yo ahora
00:31:37
quisiera hacer algo con los alumnos ciegos
00:31:39
en mi clase utilidades
00:31:42
por ejemplo
00:31:43
he ver grado
00:31:44
perdón
00:31:46
devolver grado del
00:31:52
pues le tendría que pasar un alumno ciego
00:31:58
si le paso alumno ciego
00:32:01
sin más
00:32:04
el compilador
00:32:08
como nos podemos imaginar
00:32:12
me dice a mi sentencia
00:32:13
que debería ser
00:32:15
retun a punto grado
00:32:16
¿no?
00:32:19
a mi sentencia de retun a punto grado
00:32:22
bueno, aquí el método me dice
00:32:25
eh, alumno ciego no lo conozco
00:32:26
pero a ver, si es public
00:32:28
¿cómo no vas a poder hacer referencia?
00:32:30
él es public, ya, pero es que su nombre no es este
00:32:32
su nombre es
00:32:35
modelo.especiales.alumnociego
00:32:36
ahora ya sí que lo ve perfectamente
00:32:43
¿vale?
00:32:46
entonces el verdadero nombre de la clase para Java
00:32:49
no es el nombre que ponemos aquí arriba
00:32:52
es el con todo su paquete
00:32:54
¿por qué?
00:32:57
porque así la máquina virtual va a poder navegar fácilmente
00:32:58
por el sistema de archivos hasta que lo encuentra
00:33:01
si no, hasta ahí estamos
00:33:03
vale, pero claro
00:33:09
normalmente si una aplicación está bien diseñada
00:33:13
y yo tengo las cosas unas metidas dentro de otras
00:33:17
por claridad, puedo tener a lo mejor paquetes
00:33:20
que sean un montón de subcarpetas
00:33:23
modelo, punto especiales, punto no sé qué, punto no sé cuánto
00:33:25
porque así tengo más claridad a la vista
00:33:29
para ver qué significa cada cosa
00:33:32
entonces podría llegar un momento en que mi código fuera un rollo
00:33:33
que te mueres
00:33:38
porque tuviera aquí punto no sé qué
00:33:39
punto no sé cuánto, punto no sé cuánto
00:33:41
entonces para salvarme de eso
00:33:43
para salvarme y no tener que arrastrar todo eso
00:33:44
aquí es donde
00:33:47
entra el import
00:33:49
imagínate que tenemos que usar
00:33:50
alumno ciego en mil sitios
00:33:53
de mi clase aquí, utilidades
00:33:55
alumno ciego en mil sitios
00:33:57
jolín, qué rollo escribir esto todo el rato
00:33:59
que es una línea larguísima
00:34:01
me quedan líneas de código enormes
00:34:02
vale, pues puedo hacer una trampa
00:34:05
que es
00:34:07
pones import
00:34:08
y el nombre de la clase
00:34:10
que quieres acortar
00:34:12
quiero acortar esta clase
00:34:14
vale, pues a partir de ahí
00:34:16
la puedes llamar
00:34:21
siempre como alumno ciego
00:34:23
no hace falsa que pongas su prefijo
00:34:24
si has puesto el import
00:34:26
vale
00:34:28
entonces como hemos puesto el import
00:34:29
de toda esa clase con todo su nombre
00:34:32
ahora ya
00:34:34
puedo usarla con su nombre corto
00:34:36
corto.
00:34:38
Luego, el nombre real es el largo.
00:34:40
El nombre corto lo puedo
00:34:44
usar si me echo un import
00:34:46
antes con el nombre largo. Si no me echo
00:34:48
un import con el nombre largo, pues no.
00:34:50
¿Y ahora tenemos un objeto
00:34:54
de esta clase? Bueno, eso ya
00:34:56
cuando hagamos la principal. No estamos en ello todavía.
00:34:58
¿Vale? Ahora mismo estamos en un método que
00:35:00
recibirá cuando haya una aplicación
00:35:02
ejecutándose. Sí, habrá que crear un objeto de
00:35:04
esos y pasárselo. ¿Vale?
00:35:06
Entonces, puedo usar el nombre
00:35:11
recorto aquí
00:35:13
sin paquete
00:35:14
porque he puesto
00:35:16
import
00:35:21
pero cuidado, un segundín y ahora me preguntas
00:35:23
pero cuidado con los import
00:35:29
¿vale? que tienen su truco también
00:35:31
porque imaginaos que yo tengo
00:35:34
dentro de utilidades
00:35:37
tengo una clase que se llama alumno ciego
00:35:40
no hay ningún problema
00:35:43
yo podría hacerme aquí en utilidades
00:35:45
una clase alumno ciego
00:35:47
no sé por qué querría hacerlo
00:35:48
pero como poder podría
00:35:55
imaginaos que me hago una clase aquí alumno ciego
00:35:57
dentro de utilidades
00:35:59
tengo dos clases que se llaman igual
00:36:00
no pasa nada
00:36:03
porque están en paquetes distintos
00:36:05
su nombre real, el de esta es
00:36:06
modelo.especiales.alumnociego
00:36:09
y el de esta es utilidades.alumnociego
00:36:12
son dos clases distintas
00:36:14
con nombres distintos
00:36:16
Java no tiene ningún problema con eso
00:36:17
¿cuándo puede llegar el problema?
00:36:19
cuando aquí en esta utilidades hacemos este import
00:36:21
porque ahora
00:36:24
cuando pongamos alumno ciego
00:36:26
¿a qué alumno ciego te refieres?
00:36:28
al que está en tu propio
00:36:31
paquete
00:36:32
o al del import
00:36:33
pues por defecto él asume que te refieres
00:36:35
al de tu propio paquete
00:36:38
con lo cual
00:36:40
desde aquí tenemos
00:36:42
se nos ha limitado el acceso
00:36:44
a clases alumno ciego de otros
00:36:46
con el import
00:36:48
entonces en esta situación
00:36:49
yo nunca usaría el import
00:36:51
las distinguiría por su nombre real
00:36:53
y pondría aquí
00:36:55
su nombre real
00:36:57
modelo.especiales
00:36:58
.alumnociego
00:37:04
y aquí no hay duda, me refiero a la del otro
00:37:07
me refiero a la del otro, porque he puesto el nombre
00:37:08
completo, me refiero a la del otro
00:37:11
pero si yo
00:37:13
por ahorrarme
00:37:15
escribir líneas, digo
00:37:16
no pasa nada
00:37:18
me voy ahí de chulo
00:37:19
y hago el import
00:37:22
digo, no pasa nada, me echo el import
00:37:24
como me echo el import, puedo usar alumno ciego
00:37:26
sin más
00:37:28
uso alumno ciego sin más, pues la hemos liado
00:37:29
porque ahora, alumno ciego
00:37:32
él sobreentiende que te refieres
00:37:34
a la del propio paquete
00:37:36
que se llama así
00:37:38
¿vale?
00:37:39
luego, cuidado con los import cuando hay
00:37:42
clases que se llaman igual en diferentes
00:37:44
paquetes, ¿vale? esa situación
00:37:46
hay que resolverla bien
00:37:48
lo que importa es que entendáis
00:37:50
la situación a la que me refiero
00:37:52
en esta
00:37:53
como tengo dentro de mi clase utilidades
00:37:55
un alumno ciego
00:37:58
si yo no pongo prefijo
00:37:59
es la del propio paquete
00:38:02
no es la del import
00:38:03
luego puede estar haciendo algo
00:38:05
que no es lo que yo quiero
00:38:07
vale, pero claro, esta situación
00:38:09
pues no la queremos
00:38:12
me voy a quitar esta clase de aquí
00:38:14
delete, me la quito
00:38:16
y aquí ya no hay problema con el import
00:38:17
no hay problema
00:38:20
me refiero a esta
00:38:22
vale, pues entonces
00:38:23
ya esto nos ha dejado
00:38:27
bien con nombre corto o largo
00:38:30
me da igual
00:38:33
aquí hemos usado el nombre largo para modelo alumno
00:38:34
aquí hemos usado el nombre corto
00:38:36
para alumno ciego porque teníamos el import
00:38:39
no pasa nada
00:38:41
vale
00:38:41
pues ahora ya nos ha dejado
00:38:43
sin error de compilación
00:38:47
acceder
00:38:48
¿por qué? porque alumno
00:38:49
tiene public
00:38:52
y alumno ciego tiene public
00:38:53
también, si no tiene public
00:38:56
me da igual import, me da igual lo que sea
00:38:58
que no puedo
00:39:00
vale, hasta ahí está
00:39:00
¿no? bueno, pero sigue
00:39:04
habiendo algo aquí que parece ser que está sin resolver
00:39:08
¿qué me dice? o.nombre
00:39:10
nombre no está visible
00:39:13
y aquí me dice lo mismo
00:39:16
me dice grado no está visible
00:39:17
vamos a ver
00:39:19
claro, es que
00:39:21
poner el public delante de la clase
00:39:23
solamente te sirve
00:39:26
para poder hacer referencia
00:39:28
a esa clase
00:39:30
pero luego, todo lo que hay dentro
00:39:30
propiedades y métodos
00:39:34
tú ya les tienes que hacer a cada uno
00:39:35
de ellos public o no
00:39:38
a cada uno de ellos por separado
00:39:39
la clase alumno es public
00:39:41
con lo cual yo he podido hacer referencia a ella
00:39:44
aquí
00:39:46
pero luego cuando he intentado acceder
00:39:47
meterme dentro y acceder a nombre
00:39:50
perdona pero nombre
00:39:52
nombre no es public
00:39:54
con lo cual a nombre no te dejo
00:39:56
puede ser que haya otro parámetro que sí
00:39:58
pero a public a este no
00:40:02
pues que tenemos que hacer para que además
00:40:03
de poder hacer referencia alumno
00:40:06
además me deje entrar en nombre
00:40:07
pues ponerle aquí el public
00:40:10
luego los modificadores public
00:40:13
afectan tanto a clases
00:40:16
como a propiedades
00:40:18
para la clase es imprescindible
00:40:21
es el primer paso
00:40:24
porque es para poder hacer referencia a ella
00:40:25
pero ahora ya
00:40:28
si yo me quiero meter dentro de las cosas
00:40:30
además
00:40:33
además
00:40:34
esas cosas tienen que tener public
00:40:35
¿vale?
00:40:37
no, porque a lo mejor tú quieres
00:40:45
dar acceso a unos sí y a otros no.
00:40:47
Entonces, desde el momento en que
00:40:50
quieres dar acceso solo a uno,
00:40:51
el public tiene que estar.
00:40:54
Porque el public tiene que estar
00:40:55
ya solamente para poder poner tu identificador,
00:40:57
para poder hacer el constructor, new.
00:40:59
Es decir, ya solamente
00:41:02
para poder yo aquí escribir modelo alumno
00:41:03
ya tiene que estar el public.
00:41:05
Ahora hay otra cosa que yo me meta dentro,
00:41:06
como me he metido aquí.
00:41:09
¿Vale? Entonces,
00:41:12
esto es para yo hacer referencia
00:41:14
a la clase. Y ahora,
00:41:15
si además quiero dar
00:41:17
acceso a
00:41:19
propiedades
00:41:21
tengo que
00:41:22
marcarlas como public
00:41:25
por ejemplo
00:41:27
es que yo puedo querer
00:41:30
dar acceso al nombre, pero a lo mejor tiene un identificador
00:41:32
interno
00:41:34
hombre, por seguridad, efectivamente
00:41:35
porque tú quieres proteger, encapsular
00:41:45
tú ofreces al exterior
00:41:47
solo lo imprescindible
00:41:49
porque si ofreces más parámetros
00:41:51
el otro se puede meter por error
00:41:53
y poner punto id y meterse en el id
00:41:54
y a lo mejor tú no quieres que se pueda meter en el id
00:41:57
¿vale? entonces un segundito
00:41:59
ahora, por ejemplo aquí
00:42:01
el public aquí tiene que estar
00:42:03
pero dentro de que está este public
00:42:05
a este le doy acceso
00:42:07
y a este no
00:42:09
con lo cual
00:42:10
desde utilidades
00:42:13
ahora ya sí que me
00:42:14
deja hacer el opunto nombre
00:42:17
pero si yo hubiera querido por lo que fuera
00:42:18
mostrar el id
00:42:21
pues al id me dice
00:42:22
no, id no es visible
00:42:25
a id no te dejo que entres
00:42:27
porque id no tiene
00:42:29
el public
00:42:31
a nombre sí que te dejo
00:42:32
y de hecho a nombre nos ha dejado
00:42:34
para comparar el carácter
00:42:37
pero a id no
00:42:38
solo nos deja
00:42:40
acceder a las
00:42:45
propiedades marcadas
00:42:51
marcadas como public
00:42:53
es decir
00:43:00
A esta no nos deja
00:43:02
A esta no nos dejaría
00:43:04
A esta
00:43:06
Pues no nos deja
00:43:09
¿Vale?
00:43:10
¿Vale?
00:43:13
Julín
00:43:15
El asterisco
00:43:16
¿Dónde está?
00:43:20
Aquí ¿Vale?
00:43:22
A esta primera de aquí
00:43:23
No nos está dejando
00:43:26
A esta otra sí
00:43:28
Vale, aquí lo mismo
00:43:29
para yo poder devolver
00:43:34
el grado de mi alumno ciego
00:43:37
yo no puedo acceder a la propiedad
00:43:39
grado de alumno ciego
00:43:41
si no la he puesto pública, pues aquí igual
00:43:43
a.grado me dice
00:43:45
lo siento pero no es visible
00:43:46
claro, es que si me voy a alumno ciego
00:43:48
la clase está como pública, luego puedo hacer referencia
00:43:50
pero el grado no
00:43:53
luego tendría que poner un public
00:43:54
así estaría haciendo public
00:43:56
los dos, si quiero uno sí y otro no
00:43:59
pues en líneas separadas, como fuera
00:44:00
ahora ya al ser public
00:44:02
este ya
00:44:04
sí que me deja acceder al
00:44:06
grado, ¿vale?
00:44:08
Jesús, ¿qué vas a preguntar?
00:44:10
Justo, efectivamente
00:44:16
los que tú quieras que sean llamados
00:44:18
desde fuera de la clase
00:44:22
¿vale?
00:44:24
vale, pues entonces
00:44:26
hasta aquí está claro, y ahora vamos a parar un momento
00:44:32
cosas que tienen que estar
00:44:34
claras, que
00:44:36
la aplicación reparte las clases
00:44:38
en paquetes
00:44:40
lo normal es que una de esos paquetes
00:44:41
sea la que tenga el método main
00:44:44
que hace ya las cosas
00:44:46
¿vale?
00:44:47
ahora, clase en un paquete
00:44:49
su nombre real
00:44:51
se convierte en su nombre cortito
00:44:53
el de aquí, con todo el prefijo
00:44:56
del paquete delante
00:44:58
y ese es su nombre real
00:44:59
para yo instanciarla, para lo que quiera
00:45:01
¿que me quiero ahorrar el nombre largo?
00:45:03
donde yo quiera hacer referencia
00:45:06
a ella, como aquí, donde quiera hacer
00:45:09
referencia, pues hago
00:45:11
el import con su nombre largo
00:45:13
y ya está
00:45:15
cada vez que quiera acceder a ella, pongo el corto y se acabó
00:45:15
¿vale? esto cuidado con el
00:45:19
matiz de si tengo clases que se llaman igual
00:45:21
que ahí se genera
00:45:23
la ambigüedad, eso por un lado
00:45:25
y ahora por otro
00:45:27
¿cómo
00:45:28
puedo hacer yo referencia y acceder
00:45:31
a propiedades de una clase
00:45:33
desde otro paquete, desde una clase desde otro
00:45:35
pues tengo que poner este
00:45:37
modificador en la clase
00:45:39
solo para hacer referencia a la clase
00:45:40
y ahora ya cada propiedad
00:45:43
identificar las que quiero y las que no
00:45:45
si no ponemos el public
00:45:47
esas propiedades
00:45:49
solo se pueden acceder desde la
00:45:50
propia clase
00:45:53
perdón, desde el propio paquete
00:45:54
¿vale?
00:45:57
si no se pone solo desde el mismo
00:45:59
paquete, por ejemplo, si yo me hago
00:46:01
un main o me hago lo que sea
00:46:03
dentro de mi clase modelo
00:46:04
esa clase modelo puede acceder
00:46:06
al ID sin problema, porque es una clase
00:46:09
que está en el mismo paquete
00:46:10
en el mismo, vale
00:46:12
dime
00:46:13
yo lo que hacía para acceder a una variable
00:46:15
o cualquier cosa que tenía en otra clase
00:46:18
era que llamaba el objeto y llamaba esa variable
00:46:19
creaba un objeto de esa clase
00:46:22
y le llamaba, pero con el public
00:46:25
pues no funciona tan bien en la otra
00:46:26
la demás clase que tengamos en este paquete
00:46:28
no funciona tan bien en la otra
00:46:30
tiene que tener el public para tú poder llamar
00:46:31
esa propiedad desde otra clase
00:46:34
eso es otra cosa
00:46:35
que hayamos dos clases iguales
00:46:41
si están en diferentes paquetes no da ningún error
00:46:43
es lo que acabamos de explicar
00:46:45
el problema es cuando tú haces un import
00:46:47
porque entonces
00:46:50
estás haciendo un alias
00:46:52
y a esta clase le estás dando como alias
00:46:53
un nombre que ya existe en tu paquete
00:46:56
entonces ahora ya tienes
00:46:58
la confusión servida
00:47:00
tienes una clase en tu paquete
00:47:02
que se llama Pepito
00:47:04
Una clase en otro paquete
00:47:05
Que se llama Pepito
00:47:07
Hago un alias de esa otra con Pepito
00:47:08
Pues dos iguales, no puede ser
00:47:11
Venga, vamos a
00:47:12
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 3
- Fecha:
- 9 de diciembre de 2025 - 14:06
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 47′ 15″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 941.92 MBytes