Java枚举类型的问题
枚举类型的name()和toString()方法除了第一个不能被覆盖,第二个可以覆盖之外还有没有其他区别??...
枚举类型的name()和toString()方法除了第一个不能被覆盖,第二个可以覆盖之外还有没有其他区别??
展开
展开全部
首先,我们看下枚举类的源码或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){ } 以上只是个人理解,由于本人学术浅薄,有理解不到位处望大家指点.也希望以上的回答能够对提问者有点帮助
追问
谢谢,解释得很好。
展开全部
基本上没有区别。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主说的完全正确,枚举类型的每一个成员都以该类型的一个实例,而且默认的都是声明为public
static
final的,它们有自己的方法,当然也可以怎么能直接用类名调用这个枚举变量。楼主可以用javap反编译一下类文件就清楚了!
static
final的,它们有自己的方法,当然也可以怎么能直接用类名调用这个枚举变量。楼主可以用javap反编译一下类文件就清楚了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询