黑马程序员技术交流社区

标题: 关于toString方法是怎么调用的? [打印本页]

作者: 黑马张健    时间: 2012-3-20 14:21
标题: 关于toString方法是怎么调用的?
下面有一个例子,
public class WeekDay1 {
        private WeekDay1(){}
        public final static WeekDay1 SUN = new WeekDay1();
        public final static WeekDay1 MON = new WeekDay1();
       
        public WeekDay1 nextDay(){
                if(this == SUN){
                        return MON;
                }else{
                        return SUN;
                }
        }
       
        public String toString(){
                return this == SUN?"SUN":"MON";
        }
}
public class EnumTest {
        public static void main(String[] args) {
                WeekDay1 w = WeekDay1.SUN;
                System.out.println(w.nextDay());
        }
}
打印结果为:MON
调用的是nextDay方法,最后却打印出了toString()方法里的MON,nextDay与toString这个方法之间有什么关系,以及toString()这个方法是在什么时候被调用的?
有点迷糊,请高手指点一下!
作者: 魏群    时间: 2012-3-20 14:28
w.nextDay()); 返回的是枚举类型MON是个常量
System.out.println(w.nextDay());时调用这个常量的toString() 方法
public String toString()返回枚举常量的名称,这是枚举类重写的toString()方法。返回常量名。
所以你的System.out.println(w.nextDay());返回的就是枚举常量名称。

作者: ♂诸侯♂    时间: 2012-3-20 14:29

class Person {
    private String name;
    private String sex;

    public String toString() {
        return name + "-" + sex;
    }
}

Person p = new Persion();
System.err.println(p);


会调用p的toString()



P在println的里边的东西的时候调用。
作者: 贠(yun)靖    时间: 2012-3-20 16:56
因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。
它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法总而言之,
它只是为了方便所有类的字符串操作而特意加入的一个方法
写这个方法的用途就是为了方便操作
public class Demo{      
        public static class innerClass      
           {              
             public String toString()            
                  {                     return "toString";              }      
            }      
   public static void main(String[] args)      
   {            
          innerClass   obj = new innerClass ();              
            System.out.println(obj);      
    }
}

如果某个方法里面有如下句子:
innerClass  obj=new innerClass ();
System.out.println(obj);
会得到输出:  toString
作者: 周建    时间: 2012-3-20 18:00
toString()Object的方法,Object是所有类的父类,所以此处应为重写,且在输出语句中System.out.println(obj);默认调用toString();
在你的程序中toString()与nextDay()没有直接关系,System.out.println(w);也会默认调用toString()输出SUN;






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2