Java 枚举与普通类的区别

时间:2022-10-10 10:47:02 类型:JAVA
字号:    

  相同点

  枚举类是一种特殊的类,它和普通的类一样,有自己的成员变量、成员方法、构造器。

  不同点

  枚举的构造方法私有,构造器只能使用 private 访问修饰符,所以无法从外部调用构造器,构造器只在构造枚举值时被调用。也就是说枚举类不给外界实例化的机会,只能它自己实例化,而一个枚举类的所有实例就只有枚举前面分号前的那几个,其他地方不允许创建。

  枚举类的所有实例(枚举值)必须在枚举类的第一行显式地列出,否则这个枚举类将永远不能产生实例。列出这些实例(枚举值)时,系统会自动添加 public static final 修饰,无需程序员显式添加。

  关于以上两点的一个例子

public enum Color {
    GREEN,RED,BLUE,GRAY;
}

  如果翻译为普通类大致为:

public class Color {
    public static final Color GREEN = new Color(),
            RED = new Color(),
            BLUE = new Color(),
            GRAY = new Color();
 
    private Color() {
    }
}

  枚举允许为其定义抽象方法,如果枚举里声明一个抽象方法,前面的每个实例就必须要实现该方法。注意abstract关键字对于枚举类来说是不需要的。

public enum Color {
    GREEN {
        @Override
        void draw() {
        }
    },RED {
        @Override
        void draw() {
        }
    },BLUE {
        @Override
        void draw() {
        }
    },GRAY {
        @Override
        void draw() {
        }
    };
    abstract void draw();
}

  三、向枚举中添加新方法

public enum Color {      
  RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);      
  // 成员变量 
  private String name;      
  private int index;      
  // 构造方法     
  private Color(String name, int index) {        
  this.name = name;         
  this.index = index;     
 } 
 // 普通方法     
  public static String getName(int index) {        
     for (Color c : Color.values()) {              
           if (c.getIndex() == index) {                 
                 return c.name; 
      }          
   } 
    return null;     
 } 
 // get set 方法     
     public String getName() {       
        return name;
      } 
     public void setName(String name) {    
           this.name = name; 
     }      
     public int getIndex() {      
         return index; 
     }      
     public void setIndex(int index) { 
         this.index = index; 
     }  }  
}


<