Java中的枚举类为何不能有public构造器

       声明:本博客为原创博客。未经同意。不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/27262809.

     从Java 5開始有了枚举类,须要注意的是enum定义的类默认继承的是java.lang.Enum类而不是Object类。

同一时候注意枚举类不能派生子类(类的默认修饰符为final)。其原因基于它仅仅有private构造器。那为什么要设计成这样呢?

      事实上非常easy想明确,所谓枚举类就是有包括有固定数量实例(而且实例的值也固定)的特殊类,假设其含有public构造器,那么在类的外部就能够通过这个构造器来新建实例,显然这时实例的数量和值就不固定了,这与定义枚举类的初衷相矛盾,为了避免这样的形象。就对枚举类的构造器默认使用private修饰。假设为枚举类的构造器显式指定其他訪问控制符,则会编译出错。

      另外。注意枚举类的全部实例必须在其首行显式列出,否则它不能产生实例。

例如以下是一个使用枚举类的经典演示样例:  

import java.util.*;

enum Planet
{
  MERCURY,VENUS,EARTH,MARS,JUPITER,SATURN,URANUS,NEPTUNE
}

public class EnumSample
{
   public void flyTo(Planet planet)
   {
     String destination="";
     switch(planet)
     {
       case MERCURY:
          destination="水星";
          break;
       case VENUS:
          destination="金星";
          break;
       case EARTH:
          destination="地球";
          break;
       case MARS:
          destination="火星";
          break;
       case JUPITER:
          destination="木星";
          break;
       case SATURN:
           destination="土星";
           break;
       case URANUS:
           destination="天王星";
           break;
       case NEPTUNE:
           destination="海王星";
           break;
      }
      System.out.println("The destination is "+destination);
    }
  public static void main(String[]args)
  {
     EnumSample sample=new EnumSample();
     sample.flyTo(Planet.NEPTUNE);
   }
}

posted on 2017-04-30 19:44  blfbuaa  阅读(478)  评论(0编辑  收藏  举报