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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董玲飞 中级黑马   /  2014-3-5 15:54  /  900 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一下是老师在枚举中讲的用普通类实现枚举功能的代码,这里面写到一个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());
        }
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
输出时toString()方法会自动调用,如果子类没重写toString()方法则调用父类的。
回复 使用道具 举报
当使用System.out.println()方法直接打印输出引用类型变量时,println()方法会先调用引用变量的toString()方法,再将所返回的字符串输出到屏幕上,也就是说System.out.println(weekDay.nextDay())等价于System.out.println(weekDay.nextDay().toString());

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
打印语句里如果打印一个对象的话,默认是调用这个对象所属类的toString方法的,所以不用显示的调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马