A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jialihong 中级黑马   /  2013-7-29 13:05  /  1188 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-30 10:34 编辑

枚举的构造方法必须是私有的,是一种规定,还是有说法的,希望各位帮忙解释一下?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

3 个回复

倒序浏览
枚举类个人认为是一种思想上的规则,形容的是某一类事物,只有具体的几个元素,就比如说星期。一个星期只有周一~周日这7个可操作的元素,不会有人说星期八是几号。
如果将这种思想通过JAVA来体现的话,那么就等于创建的这个星期类不能去自己创建个星期八的对象,而我们能操作的只是它类中的周一~周日。既然不能自由创建,那么就只有将构造函数private。而在JAVA中对于这种类,就并不是用class定义,而是将这样的类用enum标示出来。也就是说构造函数私有化是枚举类中的一种规定。
我在学枚举的时候是把它看成了一个类似于单例设计模式来理解的。只是单例是我们主动去操作,而枚举则是JAVA内部规则定义。

个人理解,希望可以帮到楼主。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 toShareBeauty 于 2013-7-29 18:09 编辑
王磊 发表于 2013-7-29 13:22
枚举类个人认为是一种思想上的规则,形容的是某一类事物,只有具体的几个元素,就比如说星期。一个星期只有 ...

楼上说得很好,我补充一下:
枚举是一种特殊的类,是一种在类定义的时候我们就已经明确了该类的所有对象的信息和限制的类。在类定义的时候就知道所有对象的名字和个数,所以在l类定义的是就创建好了对象。并且以后不让再创建该类的对象。这种类我们完全可以用普通 class 来定义,但是为了简洁、清晰、明了,我们专门设计了一种关键字 enum 来定义这种类,因为很多信息已经固定,所以定义的语法上删掉了很多不必要的信息,枚举是这种类的一种特定的语法表达形式。具体删掉了哪些信息你可以看我的博客 http://blog.csdn.net/zhaoyw2008/article/details/9377353 里面有总结。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
..楼上两个大神说的太详细了。我就简单的再简单的解释一下,构造方法说白了就是创建类的时候可以按照自己的意愿设置初始化,而枚举枚举,说白了就是引入一种规则,让你定义的时候只能按照规则办事儿。自然而然,如果它的构造方法公开的话,你不就可以new了,你可以new了,枚举还有啥规则限制你。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马