• 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);
       }
    }
    
    

  • 相关阅读:
    js中删除数组元素的几种方法
    js中的prototype
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    angularjs事件传递$on、$emit和$broadcast
    cron表达式
    angularjs中的时间格式化过滤
    angularjs中的$q
    IOS 错误
    Swift 错误
    IOS 控件
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6790194.html
Copyright © 2020-2023  润新知