A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a6511631 高级黑马   /  2014-7-27 10:20  /  1515 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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。

6 个回复

倒序浏览
别沉啊,求大神解答
回复 使用道具 举报
快来人啊,这里需要火力支援!
回复 使用道具 举报

回帖奖励 +1 黑马币

先研究下
回复 使用道具 举报

回帖奖励 +1 黑马币

  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. }
复制代码
这样呢?

回复 使用道具 举报
还没学习到,先看看
回复 使用道具 举报
{:2_32:}
哇!!好像是一个神奇的地方。版主帮忙了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马