帮我为这句话举个例子吧 “枚举的构造器不能有程序员来调用完成枚举的实例化,是由系统通过枚举值后面定义的参数来自动调用枚举的构造器”

解决方案 »

  1.   


    enum Dog{
    A("Tom"),B("Jerry"); private String name; Dog(String name){
    this.name = name;
    }
    }
      

  2.   

    怎么让他自动调用,又不能Dog d = new Dog("Tom");
      

  3.   

    你用 Dog.A 的时候 就自动调用构造了,这个时候A就已经有一个name属性 值是"Tom" 
      

  4.   

    那这样有什么意义吗?有没没有构造器不都是"Tom"吗?
      

  5.   

    2的例子举得不是很恰当...
    枚举一般可以通过重写的toSting()获得其值
    给你解释一下为什么不能程序员自己调用构造方法吧:
    枚举类型不能有public的构造方法,所以客户没有办法新建一个enum的实例。
    但是我们还是可以定义构造方法,在enum内部使用。用Animal这个例子解释一下。 public enum Animal{ 
    Dog("This is Dog"), 
    Cat("This is Cat"), 
    Pig("This is Pig"); private String animalType; Animal(String animalType){ 
    this.animalType= animalType; 
    } public String toSting(){ 
    return this.animalType; 
    } } 要注意这里构造方法不能为public或者protected, 从而保证构造方法只能在内部使用,
    客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值
    是public static final的常量而已。