从网上看到jdk.5新特性中枚举的介绍,大部分内容都能理解唯独是定义枚举值自己的方法,有点琢磨不透请各位指点指点!!RED中的toString()怎么样被调用呢??  前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。   public enum Color { 
  Red { 
  public String toString(){ 
   return "Color.Red"; 
  } 
  }, 
  Green { 
  public String toString(){ 
   return "Color.Green"; 
  } 
  }, 
  Blue{ 
  public String toString(){ 
   return "Color.Blue"; 
  } 
  }; 
  } 

解决方案 »

  1.   

    String str = Color.Red.toString() ;
      

  2.   


    或者说把例子里面的toString()改名为saiHi()看看这样能调出来saiHi()吗,答案是不能的。
      

  3.   


    public enum Color {

    Red {
    public String saiHi() {
    return "Color.Red";
    }
    },
    Green {
    public String saiHi() {
    return "Color.Green";
    }
    },
    Blue {
    public String saiHi() {
    return "Color.Blue";
    }
    };

    public String saiHi() {
    return "Color" ;
    }

    public static void main(String[] args) {
    System.out.println(Color.Red.saiHi());
    }
    }
    这样就行了。
    因为每一个枚举值实际上是该枚举的一个实例。
    如果你Color类中没有saiHi(),他的实例也就不会有saiHi();
    你可以用javap Color
    就可以看到public class Color extends java.lang.Enum{
        public static final Color Red;
        public static final Color Green;
        public static final Color Blue;
        static {};
        public java.lang.String saiHi();
        public static void main(java.lang.String[]);
        public static Color[] values();
        public static Color valueOf(java.lang.String);
        Color(java.lang.String, int, Color);
    }
      

  4.   

    那你得在外面声明一个 public abstract String saiHi(); 就可以了。就像这样:public enum Color {    Red {
            public String sayHi() {
                return "Color.Red";
            }
        },    Green {
            public String sayHi() {
                return "Color.Green";
            }
        },    Blue {
            public String sayHi() {
                return "Color.Blue";
            }
        };
        
        public abstract String sayHi();
    }
      

  5.   

    上面这段代码与这段代码在 JVM 内部基本上一致的,也就是说 Java 中的枚举基本上是个糖衣罢了,如果在 JDK 5 之前,一般就采用这段代码来实现枚举的。public abstract class Color {
        
        private Color(){
        }
        
        public final static Color Red = new Color() {
                public String sayHi() {
                    return "Color.Red";
                }
            };
        
        public final static Color Green = new Color() {
                public String sayHi() {
                    return "Color.Green";
                }
            };
            
        public final static Color Blue = new Color() {
                public String sayHi() {
                    return "Color.Blue";
                }
            };
        
        public abstract String sayHi();
    }
      

  6.   

    枚举的本质是类,那么定义枚举类型时也可以定义方法,这是枚举的比较高级的用法,我个人不喜欢这种枚举的用法。在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用 public static final定义变量必须指定类型。枚举是用来构建常量数据结构的模板,这个模板可扩展。枚举的使用增强了程序的健壮性,比如在引用一个不存在的枚举值的时候,编译器会报错。枚举的更多用法还需要在开发中去研究创造,Java5、Java6增加了不少新的特性。
    调用方法就是楼上说的啦
      

  7.   

    其实Color就是一个类,继承了Enum父类。Red是Color类的实例。调用方法和普通类的一样,Color color=Color.Red; //实例化Color类对象
    color.toString();  //调用toString方法http://hxraid.javaeye.com/admin/blogs/477731   上面写的很清楚