zoukankan      html  css  js  c++  java
  • java枚举学习enum

    java 1.5以后才出现enum的关键字

    所有的enum类都继承自Enum类,所以enum类无法再继承其他的类,可以实现接口,枚举类出了不能被继承其余的与普通类的特性一致,

    枚举类的构造函数只能自己类内使用

    enum类在编译阶段,编译器会把其编译成普通的类,添加values与valueof静态方法

    enum MM{YOU,ME}

    javap 该类后结果如下

    final class MM extends java.lang.Enum{
        public static final MM YOU;
        public static final MM ME;
        static {};
        public static MM[] values();
        public static MM valueOf(java.lang.String);
    }

    我们可以看的其变成了最终类所以不可以被继承,添加了values和valueof静态方法

    看一个实现接口的例子

    接口

    public interface IMM {
        public void m();
    }

    枚举类

    enum MM implements IMM {
        YOU("SD") {
            @Override
            public void m() {
                System.out.println("you");
    
            }
        },
        ME("fdsa");
        MM(String a) {
            m = a;
        }
    
        private String m;
    
        public String getA() {
            return m;
        }
    
        @Override
        public void m() {
            System.out.println("main");
    
        }
    }

    java p 反编译后

    class MM extends java.lang.Enum implements IMM{
        public static final MM YOU;
        public static final MM ME;
        static {};
        public java.lang.String getA();
        public void m();
        public static MM[] values();
        public static MM valueOf(java.lang.String);
        MM(java.lang.String, int, java.lang.String, MM);
    }

    但是重载的方法m,类是如何知道的呢

    使用接口组织枚举,来解决无法从enum继承子类

    在一个接口的内部创建实现该接口的枚举,以此将元素进行分组,可以达到将枚举元素分类组织的目的。

    public interface Food {
        enum dezzert implements Food {
            D, E, F;
        }
    
        enum water implements Food {
            W, R, T;
        }
    
        enum Appetize implements Food {
            A, B, C;
        }
    }

    资料:

    http://blog.jobbole.com/31597/

  • 相关阅读:
    JSLint报错翻译
    vue 选城市三级联动
    npm 安装 sass-loader 失败的解决办法
    Metasploit Framework(6)客户端渗透(上)
    Metasploit Framework(5)弱点扫描
    Metasploit Framework(4)信息收集
    Metasploit Framework(3)Meterpreter
    Metasploit Framework(2)Exploit模块、Payload使用
    Metasploit Framework(1)基本命令、简单使用
    Kali学习笔记22:缓冲区溢出漏洞利用实验
  • 原文地址:https://www.cnblogs.com/blachie/p/3654006.html
Copyright © 2011-2022 走看看