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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔小北 中级黑马   /  2013-8-2 09:57  /  1463 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 乔小北 于 2013-8-7 08:23 编辑

高新视频中讲枚举可以看作一个类,他的元素可以看作类的一个实际对象,但是代码编写时,又讲到‘元素相当于枚举的一个子类实现的’,
我想问一下,枚举中,他的元素是作为一个实际对象,还是一个子类?
下面的代码中,感觉是一个子类?
  1. //交通灯
  2. public enum TrafficLamp{
  3. RED(30){
  4.   public TrafficLamp nextLamp(){   
  5.    return GREEN;
  6.   }
  7. },
  8. GREEN(10){
  9.   public TrafficLamp nextLamp(){
  10.    return YELLOW;
  11.   }
  12. },
  13. YELLOW(30){
  14.   public TrafficLamp nextLamp(){
  15.    return RED;
  16.   }
  17. };
  18. public abstract TrafficLamp nextLamp();
  19. private int time;
  20. private TrafficLamp(int time){  //构造方法
  21.   this.time=time;
  22. }
  23. }
  24. <p> </p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
enum的类编译后的结尾还是.class; 只是特殊点。 里面的元素看作子类。
推荐两篇文章看看:
http://www.ibm.com/developerworks/cn/java/j-enums.html  入门
http://www.ibm.com/developerworks/cn/java/j-tiger04195/#Constructors  深入

评分

参与人数 1黑马币 +3 收起 理由
神之梦 + 3 赞一个!

查看全部评分

回复 使用道具 举报
  1. /**
  2. * 2013-8-2下午12:35:37
  3. * EnumTest.java
  4. * Administrator
  5. */
  6. package com.itheima.test;

  7. /**
  8. * @author Administrator
  9. * @time 2013-8-2下午12:35:37
  10. */
  11. public class EnumTest {

  12.         public static void main(String[] args) {
  13.                 Lamp red=Lamp.RED;
  14.                 //enum里面有抽象方法时,enum元素是其一个内部匿名子类对象,其父类是enum
  15.                 System.out.println(red.getClass().toString());
  16.                 System.out.println(red.getClass().getSuperclass().toString());
  17.                 Lamp1 red1=Lamp1.RED;
  18.                 //没有抽象方法时,enum元素是就是该enum的一个对象,父类是Enum
  19.                 System.out.println(red1.getClass().toString());
  20.                 System.out.println(red1.getClass().getSuperclass().toString());
  21.                
  22.         }
  23. }

  24. enum Lamp{
  25.         RED{
  26.                 /* (non-Javadoc)
  27.                  * @see com.itheima.test.Lamp#getName()
  28.                  */
  29.                 @Override
  30.                 public String getName() {
  31.                         // TODO Auto-generated method stub
  32.                         return "red";
  33.                 }
  34.         },GREED{
  35.                 /* (non-Javadoc)
  36.                  * @see com.itheima.test.Lamp#getName()
  37.                  */
  38.                 @Override
  39.                 public String getName() {
  40.                         // TODO Auto-generated method stub
  41.                         return "greed";
  42.                 }
  43.         },YELLOW{
  44.                 /* (non-Javadoc)
  45.                  * @see com.itheima.test.Lamp#getName()
  46.                  */
  47.                 @Override
  48.                 public String getName() {
  49.                         // TODO Auto-generated method stub
  50.                         return "yellow";
  51.                 }
  52.         };
  53.         abstract public String getName();
  54. }
  55. enum Lamp1{
  56.         RED,GREED,YELLOW
  57.        
  58. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

回复 使用道具 举报

奥,明白了,谢谢啊
回复 使用道具 举报
sergio 发表于 2013-8-2 11:20
enum的类编译后的结尾还是.class; 只是特殊点。 里面的元素看作子类。
推荐两篇文章看看:
http://www.ibm. ...

好的,谢谢
回复 使用道具 举报
是该枚举类的子类对象。所以说,是对象。 该对象是  :  public static final 匿名对象;
回复 使用道具 举报
RED(30){

public TrafficLamp nextLamp(){   

  return GREEN;

  }
}  内部是这样的:public static final Lamp RED = new Lamp(){
public TrafficLamp nextLamp(){   

  return GREEN;

  }
}所以RED为Lamp类的一个匿名子类对象!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马