码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-30 20:36:47      阅读:466      评论:0      收藏:0      [点我收藏+]

标签:而且   obj   枚举类   art   声明   port   object   通过   博客   

       声明:本博客为原创博客。未经同意。不得转载!原文链接为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);
   }
}

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

标签:而且   obj   枚举类   art   声明   port   object   通过   博客   

原文地址:http://www.cnblogs.com/blfbuaa/p/6790194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!