<thead id="rrjt3"></thead>
      <progress id="rrjt3"><dfn id="rrjt3"></dfn></progress>

      <em id="rrjt3"></em>

        <address id="rrjt3"><ins id="rrjt3"><dfn id="rrjt3"></dfn></ins></address>
          <i id="rrjt3"></i>

        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; 
             }  }  
        }


        黄网站免费 <