黑马程序员技术交流社区

标题: 枚举中toString()的重写问题 [打印本页]

作者: 徐帅    时间: 2012-7-11 19:42
标题: 枚举中toString()的重写问题
本帖最后由 蓝色的枫叶 于 2012-7-12 09:52 编辑

在覆盖toString方法时,会报错:返回值类型应该是String类型。
不知道哪里错了。在覆盖toString() 方法时有特殊的格式么?
请帮解答下,谢谢了        
package cn.xushuai.day1;

public class Enum {
        
        public static void main(String[] args){
        
        WeekDay Monday = WeekDay.MON;
        WeekDay Tueday = WeekDay.TUE;

        System.out.println(Monday.nextDay());
        System.out.println(Tueday.nextDay());
}

package cn.xushuai.day1;

public abstract class WeekDay {
        
        private WeekDay(){}
        public abstract WeekDay nextDay();

        public final static WeekDay MON = new WeekDay(){
                public WeekDay nextDay(){
                        return TUE;
                }
        };
        public final static WeekDay TUE = new WeekDay(){
                public WeekDay nextDay(){
                        return WED;
                }
        };
        @Override
                public String toString(){
                         if (this==MON)
                                return "MON";
                        else if (this==TUE)
                                return "TUE";                        
                }
}










作者: 陈淑飞    时间: 2012-7-11 19:44
if (this==MON)
                 return "MON";
             else if (this==TUE)
                     return "TUE";                     
  


条件不满足时,无返回值 呢
作者: 全海波    时间: 2012-7-11 20:32
好像是吧
作者: 曹恒业    时间: 2012-7-11 21:08
        @Override
                public String toString(){
                         if (this==MON)
                                return "MON";
                        else if (this==TUE)
                                return "TUE";
                       return “enether TUE nor MON”;     //当条件不满足时,没有返回值,所以编译错误,所以编程时要考虑到意外情况
                }

作者: 孙新强    时间: 2012-7-11 22:01
关于toString()方法,在此做一下分析:
toString()是Object的方法,而所有类都是继承Object,所以“所有对象都有这个方法”
它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法

作者: 周刚    时间: 2012-7-12 00:46
本帖最后由 周刚 于 2012-7-12 00:51 编辑

if ...else if...有没有覆盖到的地方,所以它报错说可能没有返回值。我帮你完善了一下:

public abstract class WeekDay {
        private WeekDay() {
        }

        public abstract WeekDay nextDay();

        public final static WeekDay MON = new WeekDay() {
                public WeekDay nextDay() {
                        return TUE;
                }
        };
        public final static WeekDay TUE = new WeekDay() {
                public WeekDay nextDay() {
                        return WED;
                }
        };

        public final static WeekDay WED = new WeekDay() {
                public WeekDay nextDay() {
                        return THU;
                }
        };
        public final static WeekDay THU = new WeekDay() {
                public WeekDay nextDay() {
                        return WED;
                }
        };
        public final static WeekDay FRI = new WeekDay() {
                public WeekDay nextDay() {
                        return SAT;
                }
        };
        public final static WeekDay SAT = new WeekDay() {
                public WeekDay nextDay() {
                        return SUN;
                }
        };
          public final static WeekDay SUN = new WeekDay(){
          public WeekDay nextDay(){
                  return MON;
          }
  };
        @Override
        public String toString() {
                if (this == MON)
                        return "MON";
                else if (this ==TUE)
                        return "TUE";
                else if (this == WED){
                        return "WED";
                }
                else if (this == THU){
                        return "THU";
                }
                else if (this == FRI){
                        return "FRI";
                }
                else if (this == SAT){
                        return "SAT";
                }
                else{
                        return "SUN";
                }
        }
}

作者: 徐帅    时间: 2012-7-12 09:51
周刚 发表于 2012-7-12 00:46
if ...else if...有没有覆盖到的地方,所以它报错说可能没有返回值。我帮你完善了一下:

public abstract ...

非常感谢。是因为条件都没满足时没有返回值的原因,还有谢谢你的代码,呵呵
作者: 徐帅    时间: 2012-7-12 09:52
曹恒业 发表于 2012-7-11 21:08
@Override
                public String toString(){
                         if (this==MON)

谢谢,已解决
作者: 苑占丽    时间: 2012-7-12 10:38
关于toString()方法,在此做一下分析:
toString()是Object的方法,而所有类都是继承Object,所以“所有对象都有这个方法”
它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法。

if ...else if...有没有覆盖到的地方,所以它报错说可能没有返回值。我帮你完善了一下:

public abstract class WeekDay {
         private WeekDay() {
         }

        public abstract WeekDay nextDay();

        public final static WeekDay MON = new WeekDay() {
                 public WeekDay nextDay() {
                         return TUE;
                 }
         };
         public final static WeekDay TUE = new WeekDay() {
                 public WeekDay nextDay() {
                         return WED;
                 }
         };

        public final static WeekDay WED = new WeekDay() {
                 public WeekDay nextDay() {
                         return THU;
                 }
         };
         public final static WeekDay THU = new WeekDay() {
                 public WeekDay nextDay() {
                         return WED;
                 }
         };
         public final static WeekDay FRI = new WeekDay() {
                 public WeekDay nextDay() {
                         return SAT;
                 }
         };
         public final static WeekDay SAT = new WeekDay() {
                 public WeekDay nextDay() {
                         return SUN;
                 }
         };
           public final static WeekDay SUN = new WeekDay(){
           public WeekDay nextDay(){
                   return MON;
           }
   };
         @Override
         public String toString() {
                 if (this == MON)
                         return "MON";
                 else if (this ==TUE)
                         return "TUE";
                 else if (this == WED){
                         return "WED";
                 }
                 else if (this == THU){
                         return "THU";
                 }
                 else if (this == FRI){
                         return "FRI";
                 }
                 else if (this == SAT){
                         return "SAT";
                 }
                 else{
                        return "SUN";
                 }
         }
}




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