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

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

     从Java 5开始有了枚举类,需要注意的是enum定义的类默认继承的是java.lang.Enum类而不是Object类。同时注意枚举类不能派生子类(类的默认修饰符为final),其原因基于它只有private构造器,那为什么要设计成这样呢?

      其实很容易想明白,所谓枚举类就是有包含有固定数量实例(并且实例的值也固定)的特殊类,如果其含有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);
   }
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值