日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

Java 枚舉與普通類的區(qū)別

時間:2022-10-10 10:47:02 類型:JAVA
字號:    

  相同點

  枚舉類是一種特殊的類,它和普通的類一樣,有自己的成員變量、成員方法、構(gòu)造器。

  不同點

  枚舉的構(gòu)造方法私有,構(gòu)造器只能使用 private 訪問修飾符,所以無法從外部調(diào)用構(gòu)造器,構(gòu)造器只在構(gòu)造枚舉值時被調(diào)用。也就是說枚舉類不給外界實例化的機(jī)會,只能它自己實例化,而一個枚舉類的所有實例就只有枚舉前面分號前的那幾個,其他地方不允許創(chuàng)建。

  枚舉類的所有實例(枚舉值)必須在枚舉類的第一行顯式地列出,否則這個枚舉類將永遠(yuǎn)不能產(chǎn)生實例。列出這些實例(枚舉值)時,系統(tǒng)會自動添加 public static final 修飾,無需程序員顯式添加。

  關(guān)于以上兩點的一個例子

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() {
    }
}

  枚舉允許為其定義抽象方法,如果枚舉里聲明一個抽象方法,前面的每個實例就必須要實現(xiàn)該方法。注意abstract關(guān)鍵字對于枚舉類來說是不需要的。

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;      
  // 構(gòu)造方法     
  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; 
     }  }  
}


<