You can learn singletons before learning enumeration, which is helpful to understand enumeration
The predecessor of enumeration before JDK1.5, it was used like this before enumeration
//枚举的前身
class Grade{
private String name;
//私有构造方法
private Grade(){}
private Grade (String name){
this.name = name;
}
public static Grade A = new Grade("A");
public static Grade B = new Grade("B");
public static Grade C = new Grade("C");
public static Grade D = new Grade("D");
public static Grade E = new Grade("E");
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Grage{" +
"name='" + name + '\'' +
'}';
}
}
//对象类
class Student3 {
private int age;
private String name;
private GradeEnum grade;//成绩A,B,C,D,E
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public GradeEnum getGrade() {
return grade;
}
public void setGrade(GradeEnum grade) {
this.grade = grade;
}
public Student3(){}
public Student3(int age, String name, GradeEnum grade) {
this.age = age;
this.name = name;
this.grade = grade;
}
@Override
public String toString() {
return "Student3{" +
"age=" + age +
", name='" + name + '\'' +
", grade=" + grade +
'}';
}
}
//测试
class Test3{
public static void main(String[] args) {
// Student3 s5 = new Student3(16,"张三",Grade.E);
// System.out.println(s5);
}
}
Enumeration only appeared after JDK1.5
//接口
interface En6{
//抽象方法没有方法体
public abstract void en6();
}
//1)定义枚举类要用关键字enum
enum GradeEnum implements En6{//实现接口
/*
2)所有枚举类都是Enum的子类
3)枚举类的第一行上必须是枚举项,
最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略。
4)枚举每个都是静态常量,不允许其他修饰符修饰
5)枚举类可以有构造方法,但必须是private的,它默认的也是private的。
*/
A(){
//7)枚举类也可以有抽象方法,但是枚举项必须重写该方法
public void en5(){
System.out.println("枚举中的抽象方法");
}
//8)枚举类每个类都默认继承了Enum类,所以不能再继承其他类
//但是可以实现接口,且重写其方法,并用枚举类的枚举项调用
public void en6(){
System.out.println("枚举实现接口,重写接口中的方法");
}
},B(){
public void en5(){
System.out.println("枚举中的抽象方法");
}
public void en6(){
System.out.println("枚举实现接口,重写接口中的方法");
}
};
public void en4(){
System.out.println("枚举中的普通方法");
}
public abstract void en5();
}
public class Student4 {
public static void main(String[] args) {
//6)枚举类可以有正常方法,且可以被调用执行
// 被枚举项调用执行
GradeEnum.A.en4();
GradeEnum.A.en5();
GradeEnum.A.en6();
}
}