java自学笔记——枚举类

来源:互联网 发布:查看java进程 编辑:程序博客网 时间:2024/05/21 01:28

1.实例有限且固定的类在java中被称为枚举类

2、枚举类和普通类的区别

(1)枚举类默认继承java.lang.Enum类,而不是Object类,因此枚举类不能显式的继承其它类。java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

(2)使用enum定义、非抽象的枚举类默认会使用final修改,因此枚举类不能派生出子类。

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

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

3,实现接口的枚举类

package com.algorithm;public interface StudentInterface {      public void info();}
package com.algorithm;public enum StudentEnum implements StudentInterface{MALE("男同学"){public void info() {System.out.println("代表男生。。。");}},FEMALE("女同学"){public void info() {System.out.println("代表女生。。。");}};private final String name;public String getName() {return this.name;}//枚举类的构造器只能使用private修饰private StudentEnum(String name){this.name = name;}}
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式;如果需要每个枚举值在调用该方法时呈现不同的行为方式,则可以让每个枚举值分别实现该方法。如上实例,类似于匿名内部类。

4.包含抽象方法的枚举类

package com.algorithm;public enum OperationEnum {PLUS{public double eval(double x,double y){return x+y;}},MINUS{public double eval(double x,double y){return x-y;}},TIMES{public double eval(double x,double y){return x*y;}},DIVIDE{public double eval(double x,double y){return x/y;}};public abstract double eval(double x,double y);public static void main(String[] args) {for (OperationEnum o : OperationEnum.values()) {System.out.println(o.eval(6, 3));}}}
在枚举类中定义抽象方法时不能使用abstract关键字将枚举类定义成抽象类(系统会自动加abstract关键字),而枚举类需要显示的创建枚举值,而不是作为父类,所以定义每个枚举值时必须为抽象方法提供实现。