黑马程序员技术交流社区
标题:
张老师实现抽像方法的枚举视频没听懂呀
[打印本页]
作者:
樊其杰
时间:
2013-3-14 20:58
标题:
张老师实现抽像方法的枚举视频没听懂呀
本帖最后由 樊其杰 于 2013-3-15 16:45 编辑
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();
}
复制代码
张老师视频中说RED是由TrafficLamp的子类实现是什么意思,哪位帮我分析下这个代码原理?
作者:
张善颖
时间:
2013-3-14 21:51
其实你掌握住这两点你就很好理解了:
(1)如果TrafficLamp中没有抽象方法,那么RED,Green,YELLOW就是TrafficLamp的实例对象。
(2)如果TrafficLamp中有抽象方法,那么TrafficLamp不能直接实例化,只有实现了该抽象方法的子类才能实例化,此时RED,Green,YELLOW就是TrafficLamp子类的实例对象。他们和TrafficLamp就是类与对象的关系,抽象与具体的关系。
作者:
范天成
时间:
2013-3-14 22:22
结合前面老张讲的枚举的普通类模拟实现,其实RED就是这样来的:public static final TrafficLamp RED=new TrafficLamp();
上面那句结合在你给的代码中:RED {
public TrafficLamp nextLamp() {
return GREEN;
}
可以这样写:public static final TrafficLamp RED=
new TrafficLamp() {
return GREEN;
}
这不就是匿名内部类的写法么。而匿名内部类前面的new TrafficLamp()的TrafficLamp就是它的父类名。
作者:
罗海清
时间:
2013-3-15 08:25
不知道怎么说,我没看枚举源代码,估计源代码把人们写的枚举类,变成了下面的注释部分一样思路的代码,或者说类似的代码
public enum TrafficLamp
{
RED
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
/*
也可以这样写:
public static final RED = new TrafficLamp()//因为枚举的构造函数是私有的,只能在本类实例化,写在这里就是在本类实例化
{
public TrafficLamp nextLamp()//这个是要实现的抽象方法
{
return GREEN;
}
}
*/
GREEN//这个和下面的所有对象都和上面的一样思路,可以那样写
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW
{
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();//这个不是对象,是方法,抽象的,要在定义对象的时候实现。
}
作者:
陈丽莉
时间:
2013-3-15 13:47
若还有问题,请继续追问;如果没问题了,请将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2