Java基础知识回顾之枚举定义其他结构

本文详细介绍了枚举类型的高级用法,包括定义属性、构造方法、实现接口、定义抽象方法等,展示了枚举在Java中的强大功能和灵活性。

说明

虽然发现枚举的定义比较简单,可是对于之前介绍的多例模式中还可以定义属性和方法。实际上枚举也可以。但是有以下几点要求:

  • 枚举中定义的构造方法不能使用 public 声明。(多例模式需要将构造方法私有化。)
  • 枚举对象必须要放在首行,随后才可以定义属性、构造、普通方法。

扩充枚举功能

使用下面的代码,与之前的多例设计模式操作的方式相同,但是代码要相对简洁。

enum Color {
    // 定义枚举对象
	RED("红色"),GREEN("绿色"),BLUE("蓝色");
	
	private String title;   // 枚举的属性
	
	// 将构造器方法私有化
	private Color(String title) {
		this.title=title;
	}
	
	// 覆写 toString() 方法
	@Override
	public String toString() {
		return this.title;
	}
	
}
 
public class Demo {
	public static void main(String[] args) {
		for (Color c : Color.values()) {
			System.out.println(c.ordinal() + "-" + c.name());
		}
	}
}

枚举实现接口

枚举是也是一个类,所有也具有类的相关属性,可以实现接口。

interface Message { // 定义一个接口
	public String getTitle();
}
 
enum Color implements Message {
    // 正常的枚举定义值
	RED("红色"), GREEN("绿色"), BLUE("蓝色");
	private String title;
	private Color(String title) {
		this.title = title;
	}
 
    // 覆写接口的方法
	@Override
	public String getTitle() {
		return this.title;
	}
 
	@Override
	public String toString() {
		return this.title;
	}
}
 
public class Demo {
	public static void main(String[] args) {
		Message msg = Color.BLUE;
		System.out.println(msg.getTitle());
	}
}

另一种接口实现

枚举中可以使用匿名内部类的形式实现抽象方法。

interface Message {
	public String getTitle();
}
 
enum Color implements Message {
    // 使用 匿名内部类的形式实现抽象方法
	RED("红色") {
		public String getTitle() {
			return "自己的" + this;
		}
	},
	GREEN("绿色") {
		public String getTitle() {
			return "自己的" + this;
		}
	},
	BLUE("蓝色") {
		public String getTitle() {
			return "自己的" + this;
		}
	};
 
	private String title;
	private Color(String title) {
		this.title = title;
	}
 
	@Override
	public String toString() {
		return this.title;
	}
}
 
public class Demo {
	public static void main(String[] args) {
		Message msg = Color.BLUE;
		System.out.println(msg.getTitle());
	}
}

枚举内定义抽象方法

enum Color {
	RED("红色") {
		public String getTitle() {
			return "自己的" + this;
		}
	},
	GREEN("绿色") {
		public String getTitle() {
			return "自己的" + this;
		}
	},
	BLUE("蓝色") {
		public String getTitle() {
			return "自己的" + this;
		}
	};
 
	private String title;
	private Color(String title) {
		this.title = title;
	}
 
	@Override
	public String toString() {
		return this.title;
	}
    // 在枚举中定义抽象方法
	public abstract String getTitle();
}
 
public class Demo {
	public static void main(String[] args) {
		System.out.println(Color.GREEN.getTitle());
	}
}

枚举应用

枚举在 switch 中的使用。

enum Color {
	RED, BLUE, GREEN;
}
 
public class Demo {
	public static void main(String[] args) {
		Color c = Color.GREEN;
		switch (c) {
		case RED:
			System.out.println("红色");
			break;
		case GREEN:
			System.out.println("绿色");
			break;
		case BLUE:
			System.out.println("蓝色");
		default:
			break;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wayfreem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值