java枚举类,手动实现+enum关键字实现

文章目录

  • 自定义枚举类
  • 用enum关键字定义枚举类:
  • enum类的常用方法:
  • 使用enum关键字实现的枚举类实现接口:
    • 第一种:可直接在枚举类中实现接口方法
    • 第二种:实例化枚举类对象时,每个对象分别去实现接口方法

枚举类:类的对象必须是有限个,不重复的,确定的。比如星期类的对只能有星期一,星期二…星期日,季类的对象只能有春夏秋冬四个对象,当需要定义一组常量,应该用枚举类。

如何定义枚举类:

方式一:jdk5.0之前,自定义枚举类
方式二:jdk5.0时可以使用enum关键字定义枚举类

自定义枚举类

class Season{
     
	
	//声明season的私有属性
	private final String seasonName;
	private final String seasonDesc;
	
	//私有化构造器,防止外部创建随意创建Season对象
	private Season(String seasonName , String seasonDesc) {
     
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}
	//创建四个Season对象
	public static final Season SPRING = new Season("春天" ,"spring");
	public static final Season SUMMER = new Season("夏天" ,"summer");
	public static final Season AUTUMN = new Season("秋天" ,"autumn");
	public static final Season WINNTER = new Season("冬天" ,"winnter");
	
	public String getSeasonName() {
     
		return seasonName;
	}
	
	public String getSeasonDesc() {
     
		return seasonDesc;
	}
	
	public String toString() {
     
		return "seasonName = "+seasonName+", seasonDesc = "+seasonDesc;
	}
}
public class EnumTest_01 {
     
	public static void main(String[] args) {
     
		Season SPRING = Season.SPRING;
		System.out.println(SPRING);
	}
}

用enum关键字定义枚举类:

注意:

  • 默认的toString()打印的是对象的名字
  • 定义的枚举类默认继承的是java.lang.Enum类
enum Season
	//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
	SPRING("春天" ,"春暖花开"),
	SUMMER("夏天" ,"夏日炎炎"),
	AUTUMN("秋天" ,"秋高气爽"),
	WINNTER("冬天" ,"冰天雪地");
	
	//声明season的私有属性
	private final String seasonName;
	private final String seasonDesc;

	//私有化构造器,防止外部创建随意创建Season对象
	private Season2(String seasonName , String seasonDesc) {
     
		this.seasonName = seasonName;
		this.seasonDesc = seasonDesc;
	}

	public String getSeasonName() {
     
		return seasonName;
	}
	
	public String getSeasonDesc() {
     
		return seasonDesc;
	}
}

public class EnumeTest_02 {
     
	public static void main(String[] args) {
     
		Season1 spring = Season1.SPRING;
		System.out.println(spring);
		//SPRING 默认的toString()打印的是对象的名字 
		
		System.out.println(spring.getClass().getSuperclass());
		//class java.lang.Enum 定义的枚举类默认继承的是java.lang.Enum类
	}
}

enum类的常用方法:

  • toString():返回当前枚举类对象的名称
  • values(): 返回枚举类型的对象数组,该方法可以很方便的便利所有的枚举值
  • valuesOf(String enumname):根据提供的enumname,返回与enumname相同名字的枚举类对象

使用enum关键字实现的枚举类实现接口:

第一种:可直接在枚举类中实现接口方法

:这个方法与普通类实现接口完全一样。
为了便于阅读,我把冗长的封装方法,私有属性都删去了。

interface infor1{
     
	void show();
}
enum Season2 implements infor1{
     
	//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
	SPRING("春天" ,"春暖花开"),
	SUMMER("夏天" ,"夏日炎炎"),
	AUTUMN("秋天" ,"秋高气爽"),
	WINNTER("冬天" ,"冰天雪地");
	
	public void show() {
     
		System.out.println("调用show方法");
	}
}

第二种:实例化枚举类对象时,每个对象分别去实现接口方法

:如果需要每个枚举值在调用同一个方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,每个枚举值提供不同的实现方式,从而让不同枚举值调用同一个方法时具有不同的行为方式

interface infor{
     
	void show();
}

enum Season1 implements infor{
     
	//提供枚举类的的对象,对象之间用 , 分隔,最后一个对象用 ; 分隔
	SPRING("春天" ,"春暖花开"){
     
		public void show() {
     
			System.out.println("春天在哪里");
		}
	},
	SUMMER("夏天" ,"夏日炎炎"){
     
		public void show() {
     
			System.out.println("宁夏");
		}
	},
	AUTUMN("秋天" ,"秋高气爽"){
     
		public void show() {
     
			System.out.println("秋天不回来");
		}
	},
	WINNTER("冬天" ,"冰天雪地"){
     
		public void show() {
     
			System.out.println("大约在冬季");
		}
	};

你可能感兴趣的:(java,java,类,接口,enum)