枚举类的引入
问题:
一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值
解决方案:
自定义一个类,限制别人随意创建对象
- 代码如下:
/*
* 问题:
* 一些方法在运行时,它需要的数据类型不能是任意的,而必须是一定范围内的值
* 解决方案:
* 自定义一个类,限制别人随意创建对象
* 代码如下:
*/
/*
自定义一个性别类,限制着别人任意创建该类的对象
*/
class Gender{
String value; //存储性别
//对外提供本类的对象
public static final Gender man = new Gender("男");
public static final Gender woman = new Gender("女");
//私有化Gender类,使外部不能直接创建该类对象
private Gender(String value){
this.value = value;
}
}
class Person{
String name;
Gender sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getSex() {
return sex;
}
public void setSex(Gender sex){
this.sex = sex;
}
@Override
public String toString() {
return "姓名:"+this.name +",性别:"+this.sex.value;
}
}
public class Demo3 {
public static void main(String[] args) {
Person p = new Person();
p.name = "狗娃";
p.setSex(Gender.man);
System.out.println(p);
}
}
枚举
- 枚举类的应用场景:
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,这时我们就可以是使用枚举类型进行限制
- 例如:
一年四季、方向、性别
- 格式:
enum 类名{
}
- 注意的事项:
- 枚举类也是类,只不过是一个特殊的类
- 枚举值默认的修饰符是:public static final
- 枚举值其实就是当前枚举类的类型
- 枚举值必须是枚举类中的第一个语句
- 枚举类的构造方法默认是private,修饰符也 必须是private
- 枚举类允许出现抽象的方法,但是一旦出现了抽象的方法,那么枚举值就必须实现抽象的方法
- 例如:
//定义一个方向
enum Direction{
UP("上"),DOWN("下"),LEFT("左"),RIGHT("右"); //枚举值
String value; //定义一个成员变量
public void print(){ //定义一个方法
System.out.println("value:"+value);
}
private Direction(String value){
this.value = value;
}
}
public class Enum {
public static void main(String[] args) {
Direction.UP.print();
}
}
使用枚举类解决最开始的问题:
//性别的枚举类
enum Gender1{
MAN("男"),WOMAN("女");
String value;
private Gender1(String value){
this.value = value;
}
}
class Person1{
String name;
private Gender1 sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender1 getSex() {
return sex;
}
public void setSex(Gender1 sex) {
this.sex = sex;
}
@Override
public String toString() {
return "姓名:"+this.name+",性别:"+this.sex.value;
}
}
public class Demo4 {
public static void main(String[] args) {
Person1 p = new Person1();
p.name = "张三";
p.setSex(Gender1.MAN);
System.out.println(p);
}
}