什么是枚举
是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。当需要定义一组常量时,强烈建议使用枚举类。
示例:
声明支付枚举类,支付方式4四种,声明String类型的final属性description,重写toString方法,返回description
ALIPAY("支付宝"),WECHAT("微信"),CREDITCARD("信用卡"),DEPOSITCARD("储蓄卡")
方案一:手写枚举类 ,原理:私有化构造器,类内部new指定个数的对象,对外暴露。
*
自定义 枚举类
*/
class EnumPayment{
//提供当前类的多个对象
public static final EnumPayment ALIPAY = new EnumPayment("支付宝");
public static final EnumPayment WECHAT = new EnumPayment("微信");
public static final EnumPayment CREDITCARD = new EnumPayment("信用卡");
public static final EnumPayment DEPOSITCARD = new EnumPayment("储蓄卡");
// 1 s声明属性
private final String name;
//私有化构造器 并 赋值 , 只对外提供该类的 有限个 对象(即枚举的几个对象)
private EnumPayment(String name) {
this.name = name;
}
//获取 name属性的 方法,
public String getName() {
return name;
}
//name 为final属性,无法赋值 set 方法 会报错。
// public void setName(String name) {
// this.name = name;
// }
@Override
public String toString() {
return super.toString();
}
}
方案二:使用java enum 定义枚举
public enum Payment {
ALIPAY("支付宝"),
WECHAT("微信"),
CREDITCARD("信用卡"),
DEPOSITCARD("储蓄卡");
private String description;
private Payment(){}
private Payment(String description){
this.description = description;
}
@Override
public String toString() {
return "Payment{" +
"description='" + description + '\'' +
'}';
}
}
实现接口的枚举类。
声明可支付接口Payable:
-
包含抽象方法:void pay();
-
枚举类Payment实现接口Payable
public interface Payable {
void pay();
}
public enum Payment implements Payable{
ALIPAY("支付宝"){
@Override
public void pay() {
System.out.println("支付就用支付宝,请扫码……");
}
},
WECHAT("微信"){
@Override
public void pay() {
System.out.println("推荐使用微信支付,请扫码……");
}
},
CREDITCARD("信用卡"){
@Override
public void pay() {
System.out.println("理性消费,请输入信用卡卡号……");
}
},
DEPOSITCARD("储蓄卡"){
@Override
public void pay() {
System.out.println("银联卡随用随刷,请输入卡号……");
}
};
Payment(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
private String description;
@Override
public String toString() {
return "Payment{" +
"description='" + description + '\'' +
'}';
}
}
在枚举后面可以重写接口中的方法,实现每种枚举都有不同表现,也可以在 枚举类内统一重写,那么所有枚举重写方法的表现就会一致。
测试效果:
public class PayTest {
public static void main(String[] args) {
Payment[] p = Payment.values();
for (int i = 0; i < p.length; i++) {
System.out.println(p[i].toString());
}
System.out.println(ALIPAY.getDescription());
ALIPAY.pay();
System.out.println(Payment.WECHAT.getDescription());
WECHAT.pay();
System.out.println(Payment.CREDITCARD.getDescription());
Payment.CREDITCARD.pay();
System.out.println(Payment.DEPOSITCARD.getDescription());
Payment.DEPOSITCARD.pay();
}
}
运行结果