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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CHJ 中级黑马   /  2013-10-5 23:41  /  1619 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 CHJ 于 2013-10-6 17:50 编辑
  1. public class EnumTest {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                
  8.                 WeekDay weekDay = WeekDay.SUN;
  9.                
  10.                 System.out.println(weekDay.nextDay());
  11. //为什么没调用toString()方法就打印出了字符串?
  12.         }

  13. }
复制代码
  1. public class WeekDay {
  2.         private WeekDay() {};
  3.         
  4.         public final static WeekDay SUN = new WeekDay();
  5.         public final static WeekDay MON = new WeekDay();
  6.         
  7.         public WeekDay nextDay() {
  8.                 if (this == SUN) {
  9.                         return MON;
  10.                 }else {
  11.                         return SUN;
  12.                 }
  13.         }
  14.         
  15.         public String toString() {
  16.                 return this == SUN ? "SUN" : "MON";
  17.         }
  18. }
复制代码
//为什么没调用toString()方法就打印出了字符串?

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

5 个回复

倒序浏览
因为你重写了toString方法,不重写的话,默认调取Object的toString 如果自己重写,就会调用自己的

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 FFF 于 2013-10-6 00:17 编辑

  1. public class Temp10_06 {
  2.         public static void main(String[] args ){        
  3.         X x = new X();
  4.                 System.out.println(x);
  5.         }
  6. }
  7. class X
  8. {
  9.         String Name ="X";
  10.         
  11.         public String toString()
  12.         {
  13.                 return Name="X01";
  14.         }
  15. }
复制代码
如以上代码。输出为X01而不是X
重写了toString方法。自动调用。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
任何类都是Object的子类,输出某一变量,系统会默认的调用Object的toString()方法,如果想按自己方式定义输出格式,需要复写toString()方法

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
weekDay.nextDay()中代表的是一个对象,当你打印一个对象时,系统会自动调用toString()方法,
因为toString()方法其实就是对对象自身的一个自我描述,如果打印此对象,对象就会自动调用自我描述,
此类中因为toString()重写,所以打印结果不是属于Object类中的默认toString()结果。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 麦子 于 2013-10-6 08:11 编辑

输出语句在你直接打印对象时,会自动去调用toString方法,由于所有的类都是object的子类,而object中有它自己的toString方法体,所以你不复写的话,它也会调用,只是调用的是object类中的toString方法,它会打出形如:类名@哈希值的   
而你复写了该方法,不去调用父类的方法时,默认就走你复写后的方法

好好学习,加油!不懂可以问我

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

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