黑马程序员技术交流社区
标题: 枚举,我这样理解对吗? [打印本页]
作者: heheka123 时间: 2014-4-23 12:56
标题: 枚举,我这样理解对吗?
- public class EnumDemo {
- public static void main(String[] args){
- Lamp lp = Lamp.RED;
- System.out.println(lp.nextLamp());
- }
- public enum Lamp{
- RED {
- @Override
- public Lamp nextLamp() {
- return GREEN;
- }
- },GREEN {
- @Override
- public Lamp nextLamp() {
- return YELLOW;
- }
- },YELLOW {
- @Override
- public Lamp nextLamp() {
- return RED;
- }
- };
- public abstract Lamp nextLamp();
- }
- }
复制代码
这是一个老师讲的枚举的例子,枚举类里面有个抽象方法,而在枚举中确要实现这个抽象方法,那是不是就可以看成是枚举就是一个类的子类。而这种形式,是不是可以看成是一个抽象方法的内部类呢,我觉得可以这样理解,不知道有错不
作者: 한숨짓다 时间: 2014-4-24 00:46
一旦枚举对象后面加上{},也即你说的RED、GREEN、YEELON,那么该对象实际是枚举匿名内部类对象;你把枚举理解成一个类的子类有点牵强。举个例子来让你对枚举有更深的了解:
//定义一个肤色的枚举
enum Color{
Green,Blue,Yellow;
//这里重写了Enum中的toString()方法返回枚举常量的名称,它包含在声明中。
@Override
public String toString() {
String ret = super.toString();
switch (this) {
case Green:
ret = "绿色";
break;
case Blue:
ret = "蓝色";
break;
case Yellow:
ret = "黄色";
break;
default:
break;
}
return ret;
}
}
class Personp{
Color c = Color.Blue;
void show(){
System.out.println(c);
}
}
public class Demo18 {
public static void main(String[] args) {
Color []color = Color.values();//所有枚举类都提供一个静态的values()方法(返回该枚举类所有对象组成的数组),便于遍历所有枚举对象;
for (Color c : color) {//1.5后增强for循环
System.out.println(c);
}
new Personp().show();
}
}
输出:
绿色
蓝色
黄色
蓝色
作者: ﹊佑雨时杰↘ 时间: 2014-4-24 05:05
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。你把枚举理解成一个类的子类好像是不对的
RED、GREEN、YEELON 只是枚举的对象而已, {}里面是内部类的写法
作者: 织语不如书 时间: 2014-4-24 11:38
应该说你枚举的对象是一个类的子类对象
这样才对吧……
作者: eternallove 时间: 2014-4-24 22:01
你可以这样理解枚举,枚举每个元素都相当于是枚举类的实例,因为枚举一旦建立就会默认的有一个空参数的构造方法,每个元素的后面都默认的有一对( ),这个是调用了空参数的构造方法,这样来看,元素调用了构造方法,是不是就相当于是建立了实例,然后再想实例对象后面添上一对大括号和分号,是不是就是匿名内部类的形式,既然是内部类,实例内部类和创建实例类是不是父与子的关系,当然,父类中的抽象方法,子类中必然要重写,这样理解岂不很是容易,思路也明确。实际上拿一个枚举类去反编译一下,就更加直观,理解起来就会更容易。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |