You are on page 1of 4

Programacin orientada a objetos con J ava 145

13. Constructores

Objetivos:
a) Introducir el concepto de constructor de una clase en Java
b) Interpretar el cdigo fuente de una aplicacin Java donde aparecen declaraciones
y llamadas a constructores
c) Construir una aplicacin Java sencilla, convenientemente especificada, que
emplee clases en los que se declaren explcitamente constructores

Aunque en un principio pueda parecer lo contrario, un constructor no es en realidad un
mtodo estrictamente hablando. Un constructor es un elemento de una clase cuyo identificador
coincide con el de la clase correspondiente y que tiene por objetivo obligar a y controlar cmo se
inicializa una instancia de una determinada clase, ya que el lenguaje Java no permite que las variables
miembro de una nueva instancia queden sin inicializar. Adems, a diferencia de los mtodos, los
constructores slo se emplean cuando se quiere crear una nueva instancia.
13.1. Constructores
Por defecto toda clase tiene un constructor sin parmetros cuyo identificador coincide con el
de la clase y que, al ejecutarse, inicializa el valor de cada atributo de la nueva instancia: los atributos
de tipo primitivo se inicializan a 0 o f al se, mientras que los atributos de tipo objeto (referencia) se
inicializan a nul l .

En el ejemplo de la clase Pr uebaPr eci o, que utiliza una instancia de la clase Pr eci o, la
llamada al constructor se produce en la sentencia p = new Precio(); . Mientras que la
ejecucin de new genera una nueva instancia y devuelve su direccin de memoria, la ejecucin del
constructor Pr eci o( ) inicializa los valores de los atributos (Figura 13.1).

publ i c cl ass PruebaPrecio {
publ i c st at i c voi d mai n ( St r i ng [ ] ar gs ) {
Pr eci o p; / / Cr ea una r ef er enci a de l a cl ase Pr eci o
p = new Precio(); / / Cr ea el obj et o de l a cl ase Pr eci o y r eal i za
/ / una l l amada al metodo constructor
/ / Rest o del codi go ...
}
}


Figura 13.1. Resultado de la ejecucin del constructor: inicializacin de los atributos del nuevo objeto
13.2. Declaracin de un constructor
La declaracin de un constructor diferente del constructor por defecto, obliga a que se le
asigne el mismo identificador que la clase y que no se indique de forma explcita un tipo de valor de
retorno. La existencia o no de parmetros es opcional. Por otro lado, la sobrecarga permite que
puedan declararse varios constructores (con el mismo identificador que el de la clase), siempre y
146 A. Garca-Beltrn y J .M. Arranz


cuando tengan un tipo y/o nmero de parmetros distinto. Por ejemplo, para la clase Fecha se
declaran dos constructores, el primero sin parmetros (por lo tanto se redefine el constructor por
defecto) y el segundo con tres parmetros:

/ **
* Decl ar aci on de l a cl ase Fecha
* @aut hor A. Gar ci a- Bel t r an
* Ul t i ma r evi si on: novi embr e, 2008
*/

publ i c cl ass Fecha {

/ / At r i but os o var i abl es mi embr o
pr i vat e i nt di a;
pr i vat e i nt mes;
pr i vat e i nt anho;
/ **
* Constructor 1
* Asi gna l os val or es 1, 1 y 2000 a l os at r i but os
* di a, mes y anho r espect i vament e
*/
publ i c Fecha() {
di a = 1;
mes = 1;
anho = 2000;
}
/ **
* Constructor 2
* @par amndi a el di a del mes a al macenar
* @par amnmes el mes del anho a al macenar
* @par amnanho el anho a al macenar
*/
publ i c Fecha(int ndia, int nmes, int nanho) {
di a = ndi a;
mes = nmes;
anho = nanho;
}
publ i c St r i ng t oSt r i ng( ) {
r et ur n di a + "/ " + mes + "/ " + anho;
}
}

La sobrecarga permite que puedan declararse varios constructores (con el mismo
identificador que el de la clase), siempre y cuando tengan un tipo y/o nmero de parmetros distinto.
Para probar el cdigo anterior, se construye el siguiente programa:

/ **
* Ej empl o de uso de l a cl ase Fecha
* A. Gar ci a- Bel t r an - f ebr er o, 2009
*/
publ i c cl ass Pr uebaFecha {
publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) {
Fecha or i gen = new Fecha();
Fecha act ual = new Fecha(16,2,2009);
Syst em. out . pr i nt l n( "Pr i mer a f echa: " + or i gen. t oSt r i ng( ) ) ;
Syst em. out . pr i nt l n( "Segunda f echa: " + act ual . t oSt r i ng( ) ) ;
}
}

Programacin orientada a objetos con J ava 147



Figura 13.2. Resultado de la ejecucin de los respectivos constructores para las nuevas instancias
referenciadas por or i gen y act ual

El cdigo anterior puede compilarse y ejecutarse, mostrando la siguiente salida por pantalla:

$>j avac Pr uebaFecha. j ava

Pr i mer a f echa: 1/ 1/ 2000
Segunda f echa: 16/ 2/ 2009

Nota: una vez construido un constructor ya no se puede emplear el constructor por defecto sin
parmetros. Si se desea trabajar con l, es necesario declararlo explcitamente.
13.3. Ms sobre la declaracin y uso de varios constructores
Un constructor slo puede ser llamado por otros constructores o por mtodos de clase
(st at i c). En el siguiente cdigo se muestra un ejemplo de cmo se declaran dos constructores
Cuent aBancar i a: el primero no tiene parmetros y hace una llamada al segundo constructor,
que tiene un parmetro numrico real.

/ **
* Decl ar aci on de l a cl ase Cuent aBancar i a
* Ej empl o de decl ar aci on de var i abl es
* met odos est at i cos y uso de t hi s
* @aut hor A. Gar ci a- Bel t r an
* Ul t i ma r evi si on: abr i l , 2005
*/
publ i c cl ass CuentaBancaria {
/ / At r i but os o var i abl es mi embr o
pr i vat e doubl e sal do;
publ i c st at i c i nt t ot al Cuent as=0;

/ / Met odos
publ i c CuentaBancaria( ) {
this( 0. 0) ; / / Ll amada al const r uct or que t i ene un par amet r o
}
publ i c CuentaBancaria( double ingreso ) {
sal do = i ngr eso;
i ncCuent as( ) ;
}
publ i c doubl e sal do( ) {
r et ur n sal do;
}
publ i c st at i c voi d i ncCuent as ( ) {
t ot al Cuent as++;
}
publ i c voi d t r ansf er enci a( Cuent aBancar i a or i gen ) {
sal do += or i gen. sal do;
or i gen. sal do=0;
148 A. Garca-Beltrn y J .M. Arranz


}
}

La sentencia this( 0. 0) ; en el primer constructor realiza la llamada el segundo
constructor. Ejemplo de programa que emplea la clase Cuent aBancar i a:

/ **
* Ej empl o de uso de l a cl ase Cuent aBancar i a
* @aut hor A. Gar ci a- Bel t r an
* Ul t i ma r evi si on: abr i l , 2004
*/
publ i c cl ass PruebaCuentaBancaria {
publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) {
Syst em. out . pr i nt l n( "Tot al cuent as: " + Cuent aBancar i a. t ot al Cuent as) ;
Cuent aBancar i a c1;
c1 = new CuentaBancaria();
Syst em. out . pr i nt l n( "Nueva cuent a con: " + c1. sal do( ) + " eur os") ;
Syst em. out . pr i nt l n( "Tot al cuent as: " + Cuent aBancar i a. t ot al Cuent as) ;
Cuent aBancar i a c2;
c2 = new CuentaBancaria(20.0);
Syst em. out . pr i nt l n( "Nueva cuent a con: " + c2. sal do( ) + " eur os") ;
Syst em. out . pr i nt l n( "Tot al cuent as: " + Cuent aBancar i a. t ot al Cuent as) ;
}
}

La ejecucin del cdigo anterior origina la siguiente salida por pantalla:

$>j ava Pr uebaCuent aBancar i a

Tot al cuent as: 0
Nueva cuent a con: 0. 0 eur os
Tot al cuent as: 1
Nueva cuent a con: 20. 0 eur os
Tot al cuent as: 2

You might also like