zoukankan      html  css  js  c++  java
  • 34、枚举详解

    知识点介绍
    1、枚举可以实现一个或多个接口。枚举默认继承于java.lang.Enum类,而不是Object类。Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
    2、使用enum定义、非抽象的枚举默认会使用final修饰,因此枚举不能派生子类

    3、枚举类的构造器只能使用private访问控制符

    4、枚举类的所有势力必须在枚举类的第一行显示列出

    下面是一个简单的枚举应用

    public class Test{
        public static void main(String[] args) {
            SessonEnum e=Enum.valueOf(SessonEnum.class, "Spring");
            System.out.println(e.name());
        }
    }
    
    enum SessonEnum{
        Spring,Summer,Fall,Winter;
    }

    枚举类的成员变量、方法和构造器

     1 public class Hello {
     2     public static void main(String[] args) {
     3         SessonEnum e=Enum.valueOf(SessonEnum.class, "Spring");
     4         System.out.println(e.getName());
     5     }
     6 }
     7 
     8 
     9 enum SessonEnum{
    10     Spring("春"),Summer("夏"),Fall("秋"),Winter("冬");
    11     private  final String name;
    12     private SessonEnum(String name){
    13         this.name=name;
    14     }
    15     public String getName(){
    16         return name;
    17     }
    18 }

    实现接口的枚举

    1、由枚举类来实现接口里的方法——所有枚举值实现接口都是调用方法都有相同的行为

     1 interface SessonInfo{
     2     void info();
     3 }
     4 
     5 enum SessonEnum implements SessonInfo {
     6     
     7     Spring("春"),Summer("夏"),Fall("秋"),Winter("冬");
     8     
     9     
    10     private  final String name;
    11     private SessonEnum(String name){
    12         this.name=name;
    13     }
    14     public String getName(){
    15         return name;
    16     }
    17     @Override
    18     public void info() {
    19         System.out.println("这里是公用接口的实现");
    20         
    21     }
    22 }
    23 
    24 public class Test{
    25     public static void main(String[] args) {
    26         SessonEnum spring=Enum.valueOf(SessonEnum.class, "Spring");
    27         SessonEnum summer=SessonEnum.Summer;
    28         spring.info();
    29         summer.info();
    30     }
    31 }

    输出结果:

    这里是公用接口的实现
    这里是公用接口的实现

    2、分别由每个枚举值来实现接口

     1 interface SessonInfo{
     2     void info();
     3 }
     4 
     5 enum SessonEnum implements SessonInfo {
     6     
     7     Spring("春"){
     8         @Override
     9         public void info() {
    10             System.out.println("这里是春季");
    11         }
    12     },Summer("夏"){
    13         @Override
    14         public void info() {
    15             System.out.println("这里是夏季");
    16         }
    17         
    18     },Fall("秋"){
    19         @Override
    20         public void info() {
    21             System.out.println("这里是秋季");
    22         }
    23     },Winter("冬"){
    24         @Override
    25         public void info() {
    26             System.out.println("这里是冬季");
    27         }
    28     };
    29     
    30     
    31     private  final String name;
    32     private SessonEnum(String name){
    33         this.name=name;
    34     }
    35     public String getName(){
    36         return name;
    37     }
    38 }
    39 
    40 public class Hello {
    41     public static void main(String[] args) {
    42         SessonEnum spring=Enum.valueOf(SessonEnum.class, "Spring");
    43         SessonEnum summer=SessonEnum.Summer;
    44         spring.info();
    45         summer.info();
    46     }
    47 }

    输出结果:

    这里是春季
    这里是夏季

    枚举抽象类

    假设有一个Operation枚举类,它的4个枚举值PLUS、MINUS、TIMES、DIVIDE分别代表加、减、乘、除4种运算,该枚举类需要定义一个eval()方法来完成计算

     1 public class Test{
     2     public static void main(String[] args) {
     3         System.out.println("1+2="+Operation.PLUS.eval(1, 2));
     4         System.out.println("5-3="+Operation.MINUS.eval(5, 3));
     5         System.out.println("3*4="+Operation.TIMES.eval(3, 4));
     6         System.out.println("10-2="+Operation.DIVIDE.eval(10, 2));
     7     }
     8 }
     9 
    10 enum Operation{
    11     PLUS{
    12         public double eval(double x, double y) {
    13             return x+y;
    14         }
    15     },
    16     MINUS{
    17         public double eval(double x, double y) {
    18             return x-y;
    19         }
    20     },
    21     TIMES{
    22         @Override
    23         public double eval(double x, double y) {
    24             return x*y;
    25         }
    26     },
    27     DIVIDE{
    28         @Override
    29         public double eval(double x, double y) {
    30             return x/y;
    31         }
    32     };
    33     public abstract double eval(double x,double y);
    34 }

     输出结果:

    1+2=3.0
    5-3=2.0
    3*4=12.0
    10-2=5.0

  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/caoyc/p/5536941.html
Copyright © 2011-2022 走看看