What is enum

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();

    }
}

Guess you like

Origin blog.csdn.net/CV_Ming/article/details/111874976