Java枚举类型的问题

枚举类型的name()和toString()方法除了第一个不能被覆盖,第二个可以覆盖之外还有没有其他区别??... 枚举类型的name()和toString()方法除了第一个不能被覆盖,第二个可以覆盖之外还有没有其他区别?? 展开
 我来答
dominicqhr
2012-03-08 · 超过13用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:36.9万
展开全部
首先,我们看下枚举类的源码或java1.6 API文档就会发现这两个方法的定义分别为: public final String name() { return name; } public String toString() {return name; } 两个方法都是返回枚举类中的private final String name 。本质上没什么区别。 再次,我们看下该两个方法的定义,name()定义的是final String类型的,而toString()定义的是普通String类型的,这个就是你知道为什么toString()能重写,而name()不能重写。其实你问的还有没有其它的区别,区别也是在这里能重写与不能重写的区别,我们就写一个简单的例子来说明下: public class EnumTest{ public enum People{ Chinese("中国人"),American("美国人"); private String people ; private People(String people){ this.people = people ; } public String toString(){ return super.toString()+"("+people+")" ; } } public static void main(String[] args){ People people=People.Chinese; System.out.println("name->"+people.name()); System.out.println("toString->"+people.toString()); } } 打印出来的结果是: name->Chinese toString->Chinese(中国人) 区别也就显而易见了,调用name()方法永远只能得到定义的名称,而toString()方法可以重写,你可以得到你想要得到的自定义名称。其实我们还以把上面重写了toString()方法中的super.toString去掉,修改成: public String toString(){ return people ; } 那么得到的结果如下了: name->Chinese toString->中国人 其实private People(String people)该构造函数可以有多个参数,参数的个数是由自定义的名称的参数而决定的,例如我们可以定义成这样: Chinese("中国人",1),American("美国人",2); private People(String people,int num){ } 以上只是个人理解,由于本人学术浅薄,有理解不到位处望大家指点.也希望以上的回答能够对提问者有点帮助
追问
谢谢,解释得很好。
ydwujie
2012-03-08 · 超过21用户采纳过TA的回答
知道答主
回答量:81
采纳率:0%
帮助的人:59万
展开全部
基本上没有区别。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
郜佩厍歆然
2019-01-30 · TA获得超过3806个赞
知道大有可为答主
回答量:3171
采纳率:28%
帮助的人:182万
展开全部
楼主说的完全正确,枚举类型的每一个成员都以该类型的一个实例,而且默认的都是声明为public
static
final的,它们有自己的方法,当然也可以怎么能直接用类名调用这个枚举变量。楼主可以用javap反编译一下类文件就清楚了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式