Ir al contenido principal

Los constructores y la creación de instancias

Para comenzar a analizar la creación y el comportamiento de los objetos en Java debemos de partir de la premisa de que 'todos los objetos se construyen'. Para que se entienda un poquito mejor, los constructores son aquel bloque de código que se manda a llamar cada vez que el compilador encuentra la palabra 'new' dentro del código. No se puede crear un objeto sin invocar primeramente a su constructor. De hecho, no se puede crear un nuevo objeto no solo sin invocar a su constructor sino a todos los constructores de todas sus clases padre o superclases.

 

Tomando en cuenta la información anterior, vamos a comenzar con algunos conceptos básicos sobre los constructores.

 

Conceptos básicos de los constructores::

 

Cada clase, incluyendo las clases abstractas, deben de poseer un constructor. Pero solo por el hecho de que cada clase debe de tener alguno no significa que el programador debe de escribirlo. Un constructor se ve más o menos así:

 

class MiClase{

 

  MiClase(){ } //Constructor de la clase

 

}

 

Dos cosas importantes a recordar sobre los constructores:

  * No poseen un tipo de retorno.

  * Deben de llamarse exactamente como la clase.

 

Los constructores típicamente se utilizan para inicializar variables de instancia de la clase como se muestra en el siguiente código:

 

class MiClase{

 

  int tamano;

  String nombre;

 

  MiClase(int tam, String nom){

    tamano = tam;

    nombre = nom;

  }

 

}

 

Si observamos el código anterior podemos notar que la clase MiClase no posee un constructor sin argumentos, lo que significa que el siguiente código provocaría un error al compilar:

 

MiClase mc = new Miclase(); //Error! no hay un constructor sin argumentos

 

Pero el siguiente código compilará sin errores:

 

MiClase mc = new MiClase(5,"Nombre"); //los argumentos coinciden con el constructor

 

Es muy común (e incluso deseable) que cada clase posea un constructor sin argumentos, independientemente de cuántos otros constructores sobrecargados existan (claro que los constructores pueden sobrecargarse, igual que los métodos).

 

Encadenamiento de constructores::

 

Ya sabemos que los constructores se invocan en tiempo de ejecución cuando encuentran la palabra clave 'new' dentro del código...

 

Caballo c = new Caballo();

 

Pero lo que sucede realmente cuando se encuentra 'new Caballo()' es lo siguiente (asumiendo que Caballo hereda de Animal y Animal hereda de Object):

 

1. El constructor de la clase Caballo es invocado. Cada constructor invoca al constructor de su clase padre con una llamada implícita a super(), a menos de que dicho constructor invoque a un constructor sobrecargado de su misma clase.

 

2. El constructor de la clase Animal es invocado (ya que Animal es la clase padre de Caballo).

 

3. El constructor de la clase Object es invocado (ya que Object es la clase padre última de todas las clases, todos los objetos heredan de Object, así que Animal hereda de Object aún cuando no has escrito Animal extends Object).

 

4. Las variables de instancia de la clase Object son asignadas a sus valores explícitos. Los valores explícitos son aquellos que son definidos al momento de que las variables son declaradas, como 'int i = 0;', donde '0' es el valor explícito de 'i'.

 

5. El constructor de la clase Object es completado.

 

6. Las variables de instancia de la clase Animal son asignadas a sus valores explícitos.

 

7. El constructor de la clase Animal es completado.

 

8. Las variables de instancia de la clase Caballo son asignadas a sus valores explícitos.

 

9. El constructor de la clase Caballo es completado.

 

En resumen:

 

1. main() llama new Caballo() -> 2. Caballo llama super() -> Animal llama super() -> Object()

 

Para terminar con este tema, veamos las reglas para los constructores.

 

Reglas para los constructores::

 

1. Los constructores pueden utilizar cualquier modificador de acceso, incluyendo 'private'.

 

2. El nombre del constructor debe de coincidir exactamente con el de la clase.

 

3. Los constructores no deben de tener un tipo de retorno.

 

4. Es legal, pero no es recomendable, el tener un método con el mismo nombre de la clase, pero eso no lo hace un constructor.

 

5. Si no se crea manualmente un constructor dentro del código de la clase, un constructor por defecto será generado automáticamente por el compilador.

 

6. El constructor por defecto SIEMPRE es un constructor sin argumentos.

 

7. Si se desea un constructor sin argumentos y se ha creado otro u otros constructores, el compilador no creará uno por defecto.

 

8. Cada constructor tiene como primer sentencia ya sea una llamada a un constructor sobrecargado de la misma clase (this()) o una llamada al constructor de su clase padre (super()), sin embargo, esta llamada puede ser insertada automáticamente por el compilador.

 

9. Si no se crea un constructor manualmente, y no se llama manualmente a super() o this(), el compilador insertará una llamada sin argumentos a super() como primer sentencia dentro del constructor.

 

10. Una llamada a super() puede ser ya sea sin argumentos o puede incluir argumentos pasados al constructor sobrecargado de la clase padre.

 

11. No se puede hacer una llamada a un método de instancia, o acceder a una variable de instancia sino hasta después de que el constructor de la clase padre (super()) se haya ejecutado.

 

12. Sólo variables y métodos estáticos pueden ser accedidos como parte de una llamada a super() o this().

 

13. Las clases abstractas poseen constructores, dichos constructores son llamados siempre que una subclase concreta es instanciada.

 

14. Las interfaces no poseen constructores.

 

15. No se puede invocar un constructor directamente desde un método o alguna otra parte del código que no sea otro constructor. En pocas palabras, no se puede hacer lo siguiente:

 

class Caballo{

 

  Caballo(){} //Constructor

 

  void metodoDeClase(){

    Caballo();  //ilegal!

  }

}

 

Listo, hemos terminado con los constructores. Espero haber dejado claro el tema. Alguna duda o algo qué decir? Deja tu comentario. Saludox.

Comentarios

  1. Me ha sido de mucha ayuda la informacion,ya que tengo examen de sobrecarga y no entendia nada.Muchas gracias.

    ResponderBorrar
  2. Muy bueno el articulo, me saco unas dudas que tenia relacionadas con el encadenamiento de constructores

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.