第一,通过查找 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("中国人"),England("英国人");
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){ }
|