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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈贺 中级黑马   /  2013-7-23 22:25  /  1255 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么用普通类模拟枚举时,要在枚举类中复写toString才能打印出枚举的值呢?
别的类中也需要吗?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 自问自答的不错

查看全部评分

3 个回复

倒序浏览
object类里的toString只是字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码。所以当你要想按照你想要的格式去一些对象的时候,就需要重写toString了。比如一个Student对象,直接toString肯定是一个hash码。然而你想得到的比如是:name:***,age:***。这时就重写toString就是在toString里写:System.out.println(“name:”+student.getName);
System.out.println(“age:”+student.getAge)。
这样再toString就直接反回你想要的格式。
回复 使用道具 举报
直接使用System.out.println()打印对象的引用名字的时候  jvm自动调用对象的toString方法  若是不覆盖toString 那么会调用默认的toString即Object对象的toString  覆盖之后就是调用的你覆盖的toString了 那么就是你覆盖的toString返回什么就打印什么
回复 使用道具 举报
用普通类模拟枚举类时,类中的每一个成员都是这个类的一个实例,般来说,会将其设置为static ,这样可以方便外部通过类名调用,该类中是否用toString()方法,取决于你想干什么。Object 类中的toString()方法原型是 public String toString(){}; 重写时一定要注意返回值类型,如果你是在此方法体中有打印语句,返回值类型还是需要String的,例如public void toString()  此方法不是重写的Object中方法,而是一个你自已定义的方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马