黑马程序员技术交流社区

标题: 枚举中元素的问题 [打印本页]

作者: 乔小北    时间: 2013-8-2 09:57
标题: 枚举中元素的问题
本帖最后由 乔小北 于 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>
复制代码

作者: sergio    时间: 2013-8-2 11:20
enum的类编译后的结尾还是.class; 只是特殊点。 里面的元素看作子类。
推荐两篇文章看看:
http://www.ibm.com/developerworks/cn/java/j-enums.html  入门
http://www.ibm.com/developerworks/cn/java/j-tiger04195/#Constructors  深入
作者: chslzj    时间: 2013-8-2 12:59
  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. }
复制代码

作者: 乔小北    时间: 2013-8-2 14:19
chslzj 发表于 2013-8-2 12:59

奥,明白了,谢谢啊
作者: 乔小北    时间: 2013-8-2 14:21
sergio 发表于 2013-8-2 11:20
enum的类编译后的结尾还是.class; 只是特殊点。 里面的元素看作子类。
推荐两篇文章看看:
http://www.ibm. ...

好的,谢谢
作者: 赵太云    时间: 2013-8-3 16:05
是该枚举类的子类对象。所以说,是对象。 该对象是  :  public static final 匿名对象;

作者: 于世德    时间: 2013-8-6 13:02
RED(30){

public TrafficLamp nextLamp(){   

  return GREEN;

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

  return GREEN;

  }
}所以RED为Lamp类的一个匿名子类对象!!!





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