黑马程序员技术交流社区
标题:
关于枚举抽象方法问题
[打印本页]
作者:
翟宝海
时间:
2013-6-3 18:19
标题:
关于枚举抽象方法问题
在java中,一个类中如果有抽象方法,那么这个类就是抽象类。
public enum TrafficLamp
{
RED{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW{
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();//抽象方法
}
复制代码
既然枚举也是一个类,为什么它里面有了抽象方法,它不需要被abstract修饰,也成为抽象类呢?
作者:
First
时间:
2013-6-3 19:15
因为enum 类 是不能被继承的,也不能new 的,而abstract 修饰 一个类是为了声明,该类需要被继承,不能直接new。
因此如果用abstract 来修饰enum 类,其实就是一种矛盾。
作者:
刘海芳
时间:
2013-6-3 21:01
亲,因为Enum定义的时候就是abstract,在程序开发中,经常用到这种java数据类型,就把enum这个关键字做为特殊的数据类型。在eclipse中,选择enum关键字,在点击电脑右键,进入到enum的源码就会发现你要的秘密了哦。附enum源码
public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable {
/**
* The name of this enum constant, as declared in the enum declaration.
* Most programmers should use the {@link #toString} method rather than
* accessing this field.
*/
private final String name;
/**
* Returns the name of this enum constant, exactly as declared in its
* enum declaration.
*
* <b>Most programmers should use the {@link #toString} method in
* preference to this one, as the toString method may return
* a more user-friendly name.</b> This method is designed primarily for
* use in specialized situations where correctness depends on getting the
* exact name, which will not vary from release to release.
*
* @return the name of this enum constant
*/
public final String name() {
return name;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2