黑马程序员技术交流社区
标题:
枚举求助!如何用抽象类来模拟枚举?
[打印本页]
作者:
a6511631
时间:
2014-7-27 10:20
标题:
枚举求助!如何用抽象类来模拟枚举?
本帖最后由 a6511631 于 2014-7-28 12:31 编辑
我建了一个class定义了一个抽象类TrafficLamp想模拟交通灯枚举TrafficLight。但是有个地方卡住了,不知道怎么模拟!求大神。。。附上抽象类的代码:
package com.itheima.day01;
public abstract class TrafficLamp {
// int second;
private TrafficLamp(){}
public static TrafficLamp Red = new TrafficLamp(){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Green;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Red";
}
};
public static TrafficLamp Green = new TrafficLamp(){
int second = 30;
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Yellow;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Green";
}
};
public static TrafficLamp Yellow = new TrafficLamp(){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Red;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Yellow";
}
};
public abstract TrafficLamp nextLamp();
public abstract String toString();
}
复制代码
再附上调用该抽象类及枚举TrafficLight的代码:
package com.itheima.day01;
public class EnumTest {
public static void main(String[] args){
/*TrafficLight tl = TrafficLight.Green;
System.out.println(tl.toString());
System.out.println(tl.nextLamp());
System.out.println(tl.second);*/
TrafficLamp tl = TrafficLamp.Green;
System.out.println(tl.nextLamp().toString());
System.out.println(tl.toString());
//System.out.println(tl.second);
//在这个抽象类TrafficLamp中如何像枚举那样使用tl.second得到每个灯的second呢?
}
public enum TrafficLight{
Red(30){
public TrafficLight nextLamp(){
return Green;
}
}
,Green(35){
public TrafficLight nextLamp(){
return Yellow;
}
}
,Yellow(5){
public TrafficLight nextLamp(){
return Red;
}
};
public abstract TrafficLight nextLamp();
private int second;
private TrafficLight(int second){
this.second = second;
}
}
}
复制代码
问题就是,在枚举
TrafficLight中
定义了每个灯的亮灯时间second,在调用时可以这样调用:
TrafficLight.Grenn.second。
那么,在抽象类
TrafficLamp
中怎么写才可以也像这样的格式进行调用呢?如:
TrafficLamp.Grenn.second。
作者:
a6511631
时间:
2014-7-28 09:26
别沉啊,求大神解答
作者:
a6511631
时间:
2014-7-29 08:22
快来人啊,这里需要火力支援!
作者:
亦金亦水
时间:
2014-7-29 15:08
先研究下
作者:
江苏孙浩
时间:
2014-7-29 17:58
abstract class TrafficLamp {
int second;
private TrafficLamp(){}
public static TrafficLamp Red = new TrafficLamp(){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return Green;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Red";
}
{
second = 30;
}
};
........
}
复制代码
这样呢?
作者:
日光加蓝
时间:
2014-7-29 23:29
还没学习到,先看看
作者:
masai158
时间:
2014-7-29 23:32
{:2_32:}
哇!!好像是一个神奇的地方。版主帮忙了?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2