黑马程序员技术交流社区

标题: 枚举问题? [打印本页]

作者: 董玲飞    时间: 2014-3-5 15:54
标题: 枚举问题?
一下是老师在枚举中讲的用普通类实现枚举功能的代码,这里面写到一个toString方法,是将返回值以字符串形式打印出,但这里并没有调用toString方法,请问为什么这样写呢?可不可以将最后的打印语句写成:System.out.println(weekDay.nextDay().toString());

public abstract class WeekDay
{
        private WeekDay(){} //构造方法私有化,避免建立对象
        public final static WeekDay SUN=new WeekDay(){
                public WeekDay nextDay()//覆盖父类的抽象方法,建立子类对象调用
                {
                        return MON;
                }
        };
        public final static WeekDay MON=new WeekDay(){
                public WeekDay nextDay()
                {
                        return SUN;
                }
        };
        public abstract WeekDay nextDay();

        public String toString()
        (
                return this==SUN?"SUN":"MON";       
        )
}

public class EnumTest
{
        public static void main(String[] args)
        {
                WeekDay weekDay=WeekDay.MON;
                System.out.println(weekDay.nextDay());
        }
}


作者: 上官睿鹏    时间: 2014-3-5 16:36
输出时toString()方法会自动调用,如果子类没重写toString()方法则调用父类的。
作者: 絮缘小默    时间: 2014-3-5 17:08
当使用System.out.println()方法直接打印输出引用类型变量时,println()方法会先调用引用变量的toString()方法,再将所返回的字符串输出到屏幕上,也就是说System.out.println(weekDay.nextDay())等价于System.out.println(weekDay.nextDay().toString());
作者: volvoxc    时间: 2014-3-5 18:05
打印语句里如果打印一个对象的话,默认是调用这个对象所属类的toString方法的,所以不用显示的调用。




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