Foro sobre Java SE > Duda con los campos static
Si sobrescribes el método toString() de una clase, como haces con WaterSource, cuando referencias un objeto de esa clase en algún sitio donde se espera un String estás llamando implícitamente a su método toString(). En:
System.out.println(duda1);
estás invocando el método toString() de la clase Duda1 aplicado al objeto duda1. A su vez, ese método contiene:
return "valve1= " + valve1 + " " + "valve2= " + valve2 + " " + "i= " + i + " " + "f= " + f + " " +
"source= " + source; // <--- esto es lo mismo que source.toString()
Como source es un objeto de clase WaterSource(), estás invocando el método toString() de WaterSource:
System.out.println("entre aqui 1");
return s;
La propiedad s de cualquier objeto WaterSource() vale "Constructed" debido a esta línea del constructor de WaterSource:
s = "Constructed";
Un consejo: para entender qué hace ese código o cualquier otro de este estilo, ejecútalo en modo depuración usando un IDE como NetBeans o Eclipse. Se aprende mucho. :-)
Y, por favor, usa títulos apropiados para la consulta. Esto no tiene nada que ver con campos static.
Hola a todos tengo una duda con el siguiente codigo. Ojala me puedan ayudar a comprender.
package Dudas;
import java.util.*;
class WaterSource{
private String s;
WaterSource(){
System.out.println("WaterSource()");
s="Constructed";
}
public String toString(){
System.out.println("entre aqui 1");
return s;
}
}
public class Duda1 {
private String valve1,valve2;
private WaterSource source =new WaterSource();
private int i;
private float f;
public String toString(){
System.out.println("entre aqui 2");
return
"valve1= " + valve1 + " " +
"valve2= " + valve2 + " " +
"i= " + i + " " +
"f= " + f + " " +
"source= " + source;
}
public static void main(String[] args){
Duda1 duda1= new Duda1();
System.out.println(duda1);
}
}
la salida es la siguiente:
WaterSource()
entre aqui 2
entre aqui 1
valve1= null valve2= null i= 0 f= 0.0 source= Constructed
Mi duda es en que momento el metodo toString() de la clase WaterSource le asigna el valor de "s" a la referencia "source" para que dicha referencia cambie a un objeto de tipo String(Ya que originalmente "source" apuntaba a un objeto de tipo WaterSource) y luego imprimirlo en pantalla.