黑马程序员技术交流社区

标题: 枚举求助!如何用抽象类来模拟枚举? [打印本页]

作者: a6511631    时间: 2014-7-27 10:20
标题: 枚举求助!如何用抽象类来模拟枚举?
本帖最后由 a6511631 于 2014-7-28 12:31 编辑

我建了一个class定义了一个抽象类TrafficLamp想模拟交通灯枚举TrafficLight。但是有个地方卡住了,不知道怎么模拟!求大神。。。附上抽象类的代码:
  1. package com.itheima.day01;

  2. public abstract class TrafficLamp {
  3. //        int second;
  4.         private TrafficLamp(){}
  5.         public static TrafficLamp Red = new TrafficLamp(){
  6.                 @Override
  7.                 public TrafficLamp nextLamp() {
  8.                         // TODO Auto-generated method stub
  9.                         return Green;
  10.                 }
  11.                 @Override
  12.                 public String toString() {
  13.                         // TODO Auto-generated method stub
  14.                         return "Red";
  15.                 }
  16.         };
  17.         public static TrafficLamp Green = new TrafficLamp(){
  18.                 int second = 30;
  19.                 @Override
  20.                 public TrafficLamp nextLamp() {
  21.                         // TODO Auto-generated method stub
  22.                         return Yellow;
  23.                 }
  24.                 @Override
  25.                 public String toString() {
  26.                         // TODO Auto-generated method stub
  27.                         return "Green";
  28.                 }
  29.         };
  30.         public static TrafficLamp Yellow = new TrafficLamp(){
  31.                 @Override
  32.                 public TrafficLamp nextLamp() {
  33.                         // TODO Auto-generated method stub
  34.                         return Red;
  35.                 }
  36.                 @Override
  37.                 public String toString() {
  38.                         // TODO Auto-generated method stub
  39.                         return "Yellow";
  40.                 }
  41.                
  42.         };
  43.         public abstract TrafficLamp nextLamp();
  44.         public abstract String toString();

  45.         
  46. }
复制代码

再附上调用该抽象类及枚举TrafficLight的代码:
  1. package com.itheima.day01;

  2. public class EnumTest {

  3.         public static void main(String[] args){
  4.                 /*TrafficLight tl = TrafficLight.Green;
  5.                 System.out.println(tl.toString());
  6.                 System.out.println(tl.nextLamp());
  7.                 System.out.println(tl.second);*/
  8.                 TrafficLamp tl = TrafficLamp.Green;
  9.                 System.out.println(tl.nextLamp().toString());
  10.                 System.out.println(tl.toString());
  11.                 //System.out.println(tl.second);
  12.                 //在这个抽象类TrafficLamp中如何像枚举那样使用tl.second得到每个灯的second呢?
  13.         }

  14.         public enum TrafficLight{
  15.                 Red(30){
  16.                         public TrafficLight nextLamp(){
  17.                                 return Green;
  18.                         }
  19.                 }
  20.                 ,Green(35){
  21.                         public TrafficLight nextLamp(){
  22.                                 return Yellow;
  23.                         }
  24.                 }
  25.                 ,Yellow(5){
  26.                         public TrafficLight nextLamp(){
  27.                                 return Red;
  28.                         }
  29.                 };
  30.                 public abstract TrafficLight nextLamp();
  31.                 private int second;
  32.                 private TrafficLight(int second){
  33.                         this.second = second;
  34.                 }
  35.         }
  36. }
复制代码

问题就是,在枚举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
  1. abstract class TrafficLamp {
  2.         int second;
  3.         private TrafficLamp(){}
  4.         public static TrafficLamp Red = new TrafficLamp(){
  5.                 @Override
  6.                 public TrafficLamp nextLamp() {
  7.                         // TODO Auto-generated method stub
  8.                         return Green;
  9.                 }
  10.                 @Override
  11.                 public String toString() {
  12.                         // TODO Auto-generated method stub
  13.                         return "Red";
  14.                 }
  15.                                 {
  16.                                         second = 30;
  17.                                 }
  18.         };
  19. ........
  20. }
复制代码
这样呢?


作者: 日光加蓝    时间: 2014-7-29 23:29
还没学习到,先看看
作者: masai158    时间: 2014-7-29 23:32
{:2_32:}
哇!!好像是一个神奇的地方。版主帮忙了?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2