A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张健 中级黑马   /  2012-3-20 14:21  /  3257 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面有一个例子,
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()这个方法是在什么时候被调用的?
有点迷糊,请高手指点一下!

4 个回复

倒序浏览
w.nextDay()); 返回的是枚举类型MON是个常量
System.out.println(w.nextDay());时调用这个常量的toString() 方法
public String toString()返回枚举常量的名称,这是枚举类重写的toString()方法。返回常量名。
所以你的System.out.println(w.nextDay());返回的就是枚举常量名称。
回复 使用道具 举报

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的里边的东西的时候调用。
回复 使用道具 举报
因为它是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
回复 使用道具 举报
toString()Object的方法,Object是所有类的父类,所以此处应为重写,且在输出语句中System.out.println(obj);默认调用toString();
在你的程序中toString()与nextDay()没有直接关系,System.out.println(w);也会默认调用toString()输出SUN;

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马