Como ya te dije en el último artículo, hoy voy a pasar a la práctica, para que aprendas con rapidez cómo crear e instanciar un objeto en Java. Recuerda que, si te suscribes, recibirás de manera totalmente gratuita un curso de IntelliJ, donde podrás practicar todo de lo que te hablo en mis artículos sobre Java.
More...
Puedes también echarle un vistazo a este artículo, para aprender más sobre el orden de inicialización en Java.
Pasos a seguir para instanciar un objeto en Java
Al ser esta un artículo práctico, te recomiendo que utilices un editor de código (IDE). En este artículo yo voy a utilizar Ideone (¿sabes utilizarlo?), pero te recomiendo que empieces desde ya a utilizar herramientas profesionales, como IntelliJ (¿sabes que te regalo un curso de IntelliJ IDEA por suscribirte?).
1º Crea tu "receta" o clase
Crea un archivo .java que contenga la clase
Ya te expliqué en un artículo anterior que una clase Java no es más que un molde o receta con el vas a crear un esquema del objeto que quieres instanciar. Como nosotros vamos a crear una lámpara, vamos a crear el archivo Lampara.java:
El primer paso para instanciar un objeto en Java es crear su clase.
En este caso he creado dos clases, la que voy a instanciar (Lampara) y otra, LamparaCreator, desde la que voy a instanciar los objetos de tipo Lampara. Puedes ejecutar la clase: compila con normalidad e instancia un objeto, pero no hace nada más.
2º Define las características del objeto
En mi ejemplo concreto, voy a crear lámparas que van a tener un color (ya sea el color que se introduzca al instanciar el objeto, o uno predeterminado) y que, por supuesto, se van a poder encender y apagar.
En este paso voy a hacer uso de la encapsulación: es decir, las variables van a ser privadas y se va a acceder a ellas a través de métodos que he creado con este fin.
De nuevo, la clase compila y se instancia el objeto. Pero, ¿qué hacemos con las variables? Hay que inicializarlas creando nuestro propio constructor.
Si te fijas en el constructor, verás que, a la hora de instanciar, tengo dos opciones. Por un lado, puedo instanciar un objeto sin ningún parámetro. Esto quiere decir que utilizo el constructor que no admite parámetros que, a su vez, ejecuta el segundo constructor con el parámetro predeterminado "Roja". Por otro lado, también puedo instanciar un objeto de tipo Lampara utilizando el color que yo quiera.
Además, verás que la variable encendida se queda sin inicializar. Más adelante escribiré un artículo sobre el valor predeterminado de las variables de clase o instancia; en este caso, al ser un boolean, el valor predeterminado es false. Es decir, de manera predeterminada la lámpara está apagada.
La clase es una "receta" en la que vas a describir las características del objeto.
Ya que estás aprendiendo Java, ¿por qué no aprovechas y aprendes de manera simultánea a utilizar IntelliJ IDEA? ¿Y si haces, también, un minicurso de 6 días de Java básico?
3º Instanciar un objeto no es toda la historia: ¿y si quieres modificarlo?
¡No te olvides del encapsulamiento!
Habrás observado que las variables que definen el color y el estado (encendida/apagada) de la lámpara son privadas. El siguiente paso para aplicar el encapsulamiento consiste en crear unos métodos para acceder o modificar estas variables.
¿En qué consiste el encapsulamiento?
Quizá te preguntes por qué no se puede permitir el acceso directo a las variables. La respuesta es sencilla: si el acceso/modificación de las variables se realiza mediante un método, se puede controlar que el valor que se le vaya a asignar a la variable sea un valor válido.
Un ejemplo gráfico de encapsulamiento
Supón que el objeto es una vivienda, y tú no tienes la llave. No obstante, dentro de la vivienda hay personas que van a realizar tu solicitud: van a contestar a tus preguntas sobre el piso, y van a aceptar tus modificaciones, siempre y cuando se correspondan con un criterio predeterminado. Por ejemplo, no van a pintar las paredes del piso de color negro, pero sí de azul celeste. Si tú tuvieras acceso al piso, podrías hacer y deshacer sin control, y romper o estropear cosas.
En el caso del nuestro objeto de tipo Lampara, el color de la lámpara no se va a poder modificar una vez instanciada, pero sí se va a poder encender y apagar.
Como ves, he agregado unas líneas más de código en el método main de la clase LamparaCreator para no solo instanciar un objeto, sino también para comprobar el color de la lámpara, para comprobar si está encendida o apagada y para cambiarle este último estado.
En un inicio la lámpara está apagada (false); la segunda línea muestra el cambio de estado y, al volver a imprimir el estado de la lámpara, vemos que está encendida (true).
La última línea es el resultado de imprimir el objeto utilizando System.out.println(lampara);
Imprime el objeto que has instanciado
¿Recuerdas la herencia de métodos de la que te hablé? Pues bien, todos los objetos heredan de manera implícita de la clase Object, y heredan una serie de métodos de esta. Uno de ellos, el que voy a utilizar ahora, es toString().
Puedes ejecutar este método directamente, o de manera implícita, imprimiendo un objeto. Como has visto en el ejemplo anterior, si utilizas directamente el método que tu clase hereda de la clase Object, el resultado es poco intuitivo. Es por ello que es recomendable que implementes tu propia versión:
¿Ves el resultado? Ahora te imprime una línea en la que puedes comprobar el estado de la lámpara.
Ejercicios recomendados
Ahora te toca a ti instanciar tantos objetos como puedas, con todas las características que quieras y haciendo uso del encapsulamiento. También puedes instanciar objetos que contengan, a su vez, otros objetos (de hecho, String es un objeto).
Déjame un comentario si tienes algún problema con tu código 🙂