TutorJava Nivel Básico

Todas las clases Java tienen m�todos especiales llamados Constructores que se utilizan para inicializar un objeto nuevo de ese tipo. Los contructores tienen el mismo nombre que la clase --el nombre del constructor de la clase Rectangle es Rectangle(), el nombre del constructor de la clase Thread es Thread(), etc...

Java soporta la sobrecarga de los nombres de m�todos, por lo que una clase puede tener cualquier n�mero de constructores, todos los cuales tienen el mismo nombre. Al igual que otros m�todos sobrecargados, los constructores se diferencian unos de otros en el n�mero y tipo de sus argumentos.

Consideremos la clase Rectangle del paquete java.awt que proporciona varios constructores diferentes, todos llamados Rectangle(), pero cada uno con n�mero o tipo diferentes de argumentos a partir de los cuales se puede crear un nuevo objeto Rectangle. Aqu� tiene las firmas de los constructores de la clase java.awt.Rectangle.

public Rectangle()
public Rectangle(int width, int height)
public Rectangle(int x, int y, int width, int height)
public Rectangle(Dimension size)
public Rectangle(Point location)
public Rectangle(Point location, Dimension size)

El primer constructor de Rectangle inicializa un nuevo Rectangle con algunos valores por defecto razonables, el segundo constructor inicializa el nuevo Rectangle con la altura y anchura especificadas, el tercer constructor inicializa el nuevo Rectangle en la posici�n especificada y con la altura y anchura especificadas, etc...

T�picamente, un constructor utiliza sus argumentos para inicializar el estado del nuevo objeto. Entonces, cuando se crea un objeto, se debe elegir el constructor cuyos argumentos reflejen mejor c�mo se quiere inicializar el objeto.

Bas�ndose en el n�mero y tipos de los argumentos que se pasan al constructor, el compilador determina cual de ellos utilizar, As� el compilador sabe que cuando se escribe.

new Rectangle(0, 0, 100, 200);

el compilador utilizar� el constructor que requiere cuatro argumentos enteros, y cuando se escribe.

new Rectangle(miObjetoPoint, miObjetoDimension);

utilizar� el constructor que requiere como argumentos un objeto Point y un objeto Dimension.

Cuando escribas tus propias clases, no tienes porque proporcionar constructores. El constructor por defecto, el constructor que no necesita argumentos, lo proporciona autom�ticamente el sistema para todas las clases. Sin embargo, frecuentemente se querr� o necesitar� proporcionar constructores para las clases.

Se puede declarar e implementar un constructor como se har�a con cualquier otro m�todo en una clase. El nombre del constructor debe ser el mismo que el nombre de la clase y, si se proporciona m�s de un constructor, los argumentos de cada uno de los constructores deben diferenciarse en el n�mero o tipo. No se tiene que especificar el valor de retorno del constructor.

El constructor para esta subclase de Thread, un hilo que realiza animaci�n, selecciona algunos valores por defecto como la velocidad de cuadro, el n�mero de im�genes y carga las propias im�genes.

class AnimationThread extends Thread {
    int framesPerSecond;
    int numImages;
    Image[] images;

    AnimationThread(int fps, int num) {
        int i;

        super("AnimationThread");
        this.framesPerSecond = fps;
        this.numImages = num;

        this.images = new Image[numImages];
        for (i = 0; i <= numImages; i++) {
            . . .
            // Carga las im�genes
            . . .
        }
    }
}

Observa c�mo el cuerpo de un constructor es igual que el cuerpo de cualquier otro m�todo -- contiene declaraciones de variables locales, bucles, y otras sentencias. Sin embargo, hay una l�nea en el constructor de AnimationThread que no se ver� en un m�todo normal--la segunda l�nea.

super("AnimationThread");

Esta l�nea invoca al constructor proporcionado por la superclase de AnimationThread--Thread. Este constructor particular de Thread acepta una cadena que contiene el nombre del Thread. Frecuentemente un constructor se aprovechar� del c�digo de inicializaci�n escrito para la superclase de la clase.

En realidad, algunas clases deben llamar al constructor de su superclase para que el objeto trabaje de forma apropiada. T�picamente, llamar al constructor de la superclase es lo primero que se hace en el constructor de la subclase: un objeto debe realizar primero la inicializaci�n de nivel superior.

Cuando se declaren constructores para las clases, se pueden utilizar los especificadores de acceso normales para especificar si otros objetos pueden crear ejemplares de su clase.

private
Niguna otra clase puede crear un objeto de su clase.

La clase puede contener m�todos p�blicos y esos m�todos pueden construir un objeto y devolverlo, pero nada m�s.

protected
S�lo las subclases de la clase pueden crear ejemplares de ella.
public
Cualquiera puede crear un ejemplar de la clase.
package-access
Nadie externo al paquete puede construir un ejemplar de su clase.

Esto es muy �til si se quiere que las clases que tenemos en un paquete puedan crear ejemplares de la clase pero no se quiere que lo haga nadie m�s.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP