Apuntes Lenguaje Java

5. Clases - Constructores

5.1. Noción de constructor
5.2. Constructor no-args.
5.3. Sobrecarga de constructores

5.1. Noción de constructor

Cuando se crea un objeto (se instancia una clase) es posible definir un proceso de inicialización que prepare el objeto para ser usado. Esta inicialización se lleva a cabo invocando un método especial denominado constructor. Esta invocación es implícita y se realiza automáticamente cuando se utiliza el operador new. Los constructores tienen algunas características especiales:

bulletEl nombre del constructor tiene que se igual al de la clase.
bulletPuede recibir cualquier número de argumentos de cualquier tipo, como cualquier otro método.
bulletNo devuelve ningún valor (en su declaración no se declara ni siquiera void).

El constructor no es un miembro más de una clase. Sólo es invocado cuando se crea el objeto (con el operador new). No puede invocarse explicitamente en ningún otro momento.

Continuando con los ejemplos del capítulo anterior se podría escribir un constructor para la clase Punto, de la siguiente forma:

class Punto {
    int x , y ;
    Punto ( int a , int b ) {
        x = a ; y = b ;
    }
}

Con este constructor se crearía un objeto de la clase Punto de la siguiente forma:

Punto p = new Punto ( 1 , 2 );

5.2. Constructor no-args.

Si una clase no declara ningún constructor, Java incorpora un constructor por defecto (denominado constructor no-args) que no recibe ningún argumento y no hace nada.

Si se declara algún constructor, entonces ya no se puede usar el constructor no-args. Es necesario usar el constructor declarado en la clase.

En el ejemplo el constructor no-args sería:

class Punto {
    int x , y ;
    Punto ( ) { }
}

5.3. Sobrecarga de constructores.

Una clase puede definir varios constructores (un objeto puede inicializarse de varias formas). Para cada instanciación se usa el que coincide en número y tipo de argumentos. Si no hay ninguno coincidente se produce un error en tiempo de compilación.

Por ejemplo:

class Punto {
    int x , y ;
    Punto ( int a , int b ) {
        x = a ; y = b ;
    }
    Punto () {
        x = 0 ; y = 0;
    }
}

En el ejemplo se definen dos constructores. El citado en el ejemplo anterior y un segundo que no recibe argumentos e inicializa las variables miembro a 0. (Nota: veremos más adelante que este tipo de inicialización es innecesario, pero para nuestro ejemplo sirve).

Desde un constructor puede invocarse explicitamente a otro constructor utilizando la palabra reservada this . this es una referencia al propio objeto. Cuando this es seguido por parénteses se entiende que se está invocando al constructor del objeto en cuestión. Puedes ver el uso más habitual de this aquí. El ejemplo anterior puede reescribirse de la siguiente forma:

class Punto {
    int x , y ;
    Punto ( int a , int b ) {
        x = a ; y = b ;
    }
    Punto () {
        this (0,0);
    }
}

 

Cuando se declaran varios constructores para una misma clase estos deben distinguirse en la lista de argumentos, bien en el número, bien en el tipo.

Esta característica de definir métodos con el  mismo nombre se denomina sobrecarga y es aplicable a cualquier método miembro de una clase como veremos más adelante.

Antonio Bel Puchol - antonio@abelp.net