Foros del Web » Programación para mayores de 30 ;) » Java »

Duda con constructor que llama a otro constructor

Estas en el tema de Duda con constructor que llama a otro constructor en el foro de Java en Foros del Web. Buenas, estoy iniciandome en la programación con java y no entiendo por que estos dos programas que les adjunto no son equivalentes. La duda es ...
  #1 (permalink)  
Antiguo 09/07/2010, 11:44
 
Fecha de Ingreso: marzo-2005
Mensajes: 28
Antigüedad: 19 años, 1 mes
Puntos: 0
Duda con constructor que llama a otro constructor

Buenas, estoy iniciandome en la programación con java y no entiendo por que estos dos programas que les adjunto no son equivalentes. La duda es la forma de llamar a un constructor dentro de otro constructor.
Creo que debo de tener alguna duda de concepto. Les agradecería que le dieran un vistazo y me expliquen que es lo ocurre.

Gracias por su tiempo.


Código PHP:
// Prueba.java
class Prueba{
        
int x=0;
        
String y="valor por defecto";

    
Prueba (int xString y){
        
this.x=x;
        
this.y=y;
        
System.out.println ("Estamos en el primer constructor");
    }

    
Prueba (int x){
        
this (x,"valor arbritrario"); //Esta es la parte que cambia
        
System.out.println ("Estamos en el segundo constructor");
    }

public static 
void main(String[]args){
    
Prueba prb=new Prueba ("nuevo valor");
    
System.out.println("Primer constructor: " prb." y " prb."\n");

    
Prueba prb2=new Prueba (10);
    
System.out.println("Segundo constructor: " prb2." y " prb2.y);
    }
}
/*Devuelve:
*Estamos en el primer constructor
*Primer constructor: 5 y nuevo valor
*
*Estamos en el primer constructor
*Estamos en el segundo constructor
*Segundo constructor: 10 y valor arbritrario  
 
 Como pueden ver en la última línea esta programa SI hace lo que quiero*/ 



Código PHP:
// Prueba.java
class Prueba{
        
int x=0;
        
String y="valor por defecto";

    
Prueba (int xString y){
        
this.x=x;
        
this.y=y;
        
System.out.println ("Estamos en el primer constructor");
    }

    
Prueba (int x){
        new 
Prueba (x,"valor arbritrario"); //Esta es la parte que cambia
        
System.out.println ("Estamos en el segundo constructor");
    }

public static 
void main(String[]args){
    
Prueba prb=new Prueba ("nuevo valor");
    
System.out.println("Primer constructor: " prb." y " prb."\n");

    
Prueba prb2=new Prueba (10);
    
System.out.println("Segundo constructor: " prb2." y " prb2.y);
    }
}
/*Devuelve:
*Estamos en el primer constructor
*Primer constructor: 5 y nuevo valor
*
*Estamos en el primer constructor
*Estamos en el segundo constructor
*Segundo constructor: 0 y valor por defecto 

Como pueden ver en la última línea esta programa NO hace lo que quiero*/ 
  #2 (permalink)  
Antiguo 09/07/2010, 13:53
 
Fecha de Ingreso: junio-2009
Mensajes: 9
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda con constructor que llama a otro constructor

Basicamente el problema es que cuando usas this estas diciendo a java que para el mismo objeto que se esta creando llame al constructor que cumpla con los parametros pasados, es decir el nuevo objeto retornado tendra esas variables inicializadas. Ahora mira bien en el segundo programa cuando en el segundo constructor usas new estas creando un nuevo objeto distinto del que se esta creando es decir estas creando un nuevo objeto dentro de otro nuevo objeto, ese segundo nuevo objeto inicializa sus variables, pero ese objeto no se asigna a nadie puesto que el lado derecho de la expresion new Prueba (x,"valor arbritrario") no es asginada a nada, por ultimo el primer nuevo objeto tendra sus variables con los valores por defecto. Espero haber sido claro.
  #3 (permalink)  
Antiguo 09/07/2010, 15:09
 
Fecha de Ingreso: marzo-2005
Mensajes: 28
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Duda con constructor que llama a otro constructor

Gracias, no habia caido en lo que me comentas.
Ahora la he modificado y ya me funciona. Gracias de nuevo.

Código PHP:
class Prueba{
        
int x=0;
        
String y="valor por defecto";
        
Prueba prb3;

    
Prueba (int xString y){
        
this.x=x;
        
this.y=y;
        
System.out.println ("Estamos en el primer constructor");
    }

    
Prueba (int x){
        
prb3 = new Prueba (x,"valor arbritrario"); //Esta es la parte que cambia
        
System.out.println ("Estamos en el segundo constructor");
    }

public static 
void main(String[]args){
    
Prueba prb=new Prueba ("nuevo valor");
    
System.out.println("Primer constructor: " prb." y " prb."\n");

    
Prueba prb2=new Prueba (10);
    
System.out.println("Segundo constructor: " prb2.prb3." y " prb2.prb3.y);
    }
}

/* Run:
 * Estamos en el primer constructor
 * Primer constructor: 5 y nuevo valor
 *
 * Estamos en el primer constructor
 * Estamos en el segundo constructor
 * Segundo constructor: 10 y valor arbritrario
 */ 

Etiquetas: constructor, llama
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:43.