黑马程序员技术交流社区

标题: 关于 toString();的小问题 [打印本页]

作者: CHJ    时间: 2013-10-5 23:41
标题: 关于 toString();的小问题
本帖最后由 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()方法就打印出了字符串?

作者: 毋须繁华    时间: 2013-10-5 23:48
因为你重写了toString方法,不重写的话,默认调取Object的toString 如果自己重写,就会调用自己的
作者: FFF    时间: 2013-10-6 00:15
本帖最后由 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方法。自动调用。
作者: lizhangzhi    时间: 2013-10-6 00:31
任何类都是Object的子类,输出某一变量,系统会默认的调用Object的toString()方法,如果想按自己方式定义输出格式,需要复写toString()方法
作者: doitforyou    时间: 2013-10-6 00:52
weekDay.nextDay()中代表的是一个对象,当你打印一个对象时,系统会自动调用toString()方法,
因为toString()方法其实就是对对象自身的一个自我描述,如果打印此对象,对象就会自动调用自我描述,
此类中因为toString()重写,所以打印结果不是属于Object类中的默认toString()结果。
作者: 麦子    时间: 2013-10-6 08:10
本帖最后由 麦子 于 2013-10-6 08:11 编辑

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

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




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