枚举类
如果一个类的对象是有限和固定的,则可以使用枚举类。本笔记,主要介绍基本的枚举类使用:基本语法和实例。
目录
正文
1. 枚举类-语法
1.1 枚举类与普通类相同之处
* enum 与 class、interface 具有相同地位; * 可以继承多个接口; * 可以拥有构造器、成员方法、成员变量;1.2 枚举类与普通类不同之处
* 默认继承 java.lang.Enum 类,所以不能继承其他父类;其中 java.lang.Enum 类实现了 java.lang.Serializable 和 java.lang.Comparable 接口; * 使用 enum 定义,默认使用 final 修饰,因此不能派生子类; * 构造器默认使用 private 修饰,且只能使用 private 修饰; * 枚举类所有实例必须在第一行给出,默认添加 public static final 修饰,否则无法产生实例;1.3 实例
```java public class Demo {public static void main(String[] args) {
for(Season s : Season.values()) { //values() 方法,返回 Season[] 枚举值集合
new SeasonTest().judge(s);
}
}
}
enum Season {
SPRING, SUMMER, FALL, WINTER;
}
class SeasonTest {
public void judge(Season s) {
switch(s) { //JDK 1.5 之后,switch 支持枚举类型;且,case 后面可以直接书写枚举值,不需要限定
case SPRING:
System.out.println("Spring");
break;
case SUMMER:
System.out.println("Summer");
break;
case FALL:
System.out.println("Fall");
break;
case WINTER:
System.out.println("Winter");
break;
}
}
<h3 id="1.4"> 1.4 成员变量、构造器和方法</h3>
#### 1.4.1 成员变量实例
```java
public class Demo {
public static void main(String[] args) {
// valueOf 是 Enum 中的静态方法,用于:返回指定枚举类中,指定名称的枚举值
// 源码声明:
// public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
Gender tom = Gender.valueOf(Gender.class, "FEMALE");
tom.name = "female";
System.out.println(tom + " + " + tom.name);
}
}
enum Gender {
MALE, FEMALE;
public String name;
}
1.4.2 构造器
enum Gender {
MALE("男"), FEMALE("女");
private final String name; //应该设置成 private final
private Gender(String name) { // 应该设置成 private
this.name = name;
}
public String getName() {
return this.name;
}
}
1.4.3 方法
//1. 实现接口方法(1)
interface Info {
void info();
}
enum Gender implements Info{
MALE("男"), FEMALE("女");
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
@Override
public void info() {
// 此时两个值调用的方法是相同的
}
}
////1. 实现接口方法(2)
interface Info {
void info();
}
enum Gender implements Info{
MALE("男") {
@Override
public void info() {
// 分别实现接口方法
}
},
FEMALE("女") {
@Override
public void info() {
// 分别实现接口方法
}
};
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
//2. 实现 Enum 中的抽象方法
enum Gender {
MALE("男"){
@Override
public void info() {
// TODO Auto-generated method stub
}
},FEMALE("女"){
@Override
public void info() {
// TODO Auto-generated method stub
}
};
private final String name;
private Gender(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public abstract void info();
}