枚举类
什么是枚举类?
- 在数学里,掷骰子,每一次都列举出来。这就是枚举。
- 在java中,若一个类的对象是有限个,确定的,我们便可以引入枚举的思想,构造枚举类。
- JDK1.5之前需要自定义枚举类
- JDK 1.5 新增的 enum 关键字用于定义枚举类
- 若一个类里只有一个对象,那么可将此枚举类看成单例模式。
自定义枚举类
package com.hyb.usualClass;
/**
* @program: EnumClass
* @description:枚举类
* @author: Huang Yubin
* @create: 2021-06-12 15:03
**/
class EnumMain{
public static void main(String[] args) {
EnumClass s1 = EnumClass.s1;
System.out.println(s1);
System.out.println(s1.getA());
}
}
class EnumClass {
// 为了防止外部修改,私有化属性
private final String a;
private final String b;
// 私有化构造器
private EnumClass(String A,String B){
this.a=A;
this.b=B;
}
// 公有化对象,静态,final修饰,防止外部更改
public static final EnumClass s1=new EnumClass("a","hyb");
public static final EnumClass s2=new EnumClass("b","zyl");
/*既然是枚举,不允许外部改变自己的值,那么自然不能提供set方法,但外部需要访问我们的属性,
* 所以我们只能提供get方法和toString*/
public String getA() {
return a;
}
public String getB() {
return b;
}
@Override
public String toString() {
return "EnumClass{" +
"a='" + a + '\'' +
", b='" + b + '\'' +
'}';
}
}
enum枚举类
package com.hyb.usualClass;
/**
* @program: EnumClass
* @description:枚举类
* @author: Huang Yubin
* @create: 2021-06-12 15:03
**/
class EnumMain{
public static void main(String[] args) {
EnumClass s1 = EnumClass.s1;
System.out.println(s1);
}
}
enum EnumClass {
// 从原来的公有化对象那里转变,删除重复的,
s1("a","hyb"),
s2("b","zyl");
// 为了防止外部修改,私有化属性
private final String a;
private final String b;
// 私有化构造器
private EnumClass(String A,String B){
this.a=A;
this.b=B;
}
// 公有化对象,静态,final修饰,防止外部更改
/*在enum枚举类中,继承的不是object类,而是继承enum类的*/
@Override
public String toString() {
return "EnumClass{" +
"a='" + a + '\'' +
", b='" + b + '\'' +
'}';
}
}
enum常用方法
- values返回enum对象的内容
- valuesOf返回指定对象的值
class EnumMain{
public static void main(String[] args) {
// EnumClass s1 = EnumClass.s1;
// System.out.println(s1);
/*我们都知道,toString方法是可以返回内容的,但是在enum里已经实例化了对象,外面就不可能再调用了
* 只能通过values和valuesOf方法,返回内容,
* 当调用这两个方法的时候,它们会自动调用toString方法,然后想要怎么输入全靠你重写toString决定了
在这里注意,它自己本身的父类的toString方法是返回对象名字的,所以*/
EnumClass[] value=EnumClass.values();
for (EnumClass enumClass : value) {
System.out.println(enumClass);
}
System.out.println(EnumClass.valueOf("s1"));
}
}
enum类实现接口
-
接口实现方法就不用多说了。
-
但有一点值得一提,我们实现接口时重写的方法,都是在本类下实现的,
但是一切皆对象,所以本类也是个对象,这么说来,我们也可以在本来下的对象里重写接口的方法。
例如,以上述为例,我们要求分别在s1和s2中重写接口方法,如何实现呢?
很简单,直接在对象里实现就可以了。
interface Enum{ void show(); } enum EnumClass implements Enum{ // 从原来的公有化对象那里转变,删除重复的, s1("a","hyb"){ @Override public void show() { System.out.println("这是是s1"); }}, s2("b","zyl"){ @Override public void show() { } };
注意:以上代码不全,只是做个例子,当我们分别重写,必须要全部都重写。