JAVA学习日记: 枚举(2)

今天我学习的是枚举的第二课(基础)

今天主要内容:

1.枚举中的关联数据及方法
2.枚举比较
3.枚举的嵌套
4.枚举实现接口

枚举中的数据及方法:

枚举中的实例可以被属性保存。
使用方法获取枚举属性值。

枚举的比较:

	即使不同枚举中的实例相同,但是只要枚举不同就不可以比较,只可以比较同一枚举中的实例详情请看笔记中的代码演示。

枚举的嵌套:

	枚举不能在方法中进行声明,但是可以在接口、类甚至是另一枚举中声明。
	咱们使用枚举中的实例几乎都是用名称调用的所以枚举默认是静态的。

枚举实现接口:

	与类实现接口的方法类似。

代码案例:

Game枚举:

	主要用来测试枚举中的关联数据及方法,主要测试构造方法
package LessonForEnum02;

public enum Game 
{
    
    
//	public enum GameMode02
//	{
    
    
//		NORMAL;
//	}
	
	//MARIO,MONSTERHUNTER,ZELDA;无参构造存在的时候可以这样
	
	MARIO("马里奥制造"),MONSTERHUNTER("怪物猎人:世界"),ZELDA("塞尔达传说:旷野之息");
	//有参构造存在但无参构造不存在时可以运用这样的方式给枚举中的实例传入属性值
	
	String game_name;
	String game_releseas_date;
	
	//枚举的构造方法权限修饰符只能是private
	//枚举的构造方法不可以来实例化一个枚举
//	private Game()
//	{
    
    
//		System.out.println("调用了枚举的构造方法private Game()");
//	}
	
	//如果只有这个带参构造方法的话,上边实例会报错,
	private Game(String game_name)
	{
    
    
		this.game_name = game_name;
		System.out.println("调用了枚举的构造方法private Game(String game_name)");
	}
	
	public String getGameName()
	{
    
    
		return this.game_name;
	}
	
	public String getGameReleseasDate()
	{
    
    
		return this.game_releseas_date;
	}
}

Game2枚举:

	与Game枚举一样来测试枚举中的关联数据及方法,主要测试方法
package LessonForEnum02;

public enum Game2//枚举实现体 
{
    
    
	//在枚举实例中可以有方法,写法如下
	RPG//可以把这里的RPG理解为匿名内部类
	{
    
    
		//可以写方法
//		public void getGameType()
//		{
    
    
//			System.out.println("This is The RPG game type!");
//		}

		//抽象方法可以在这里面重写
		@Override
		public void getGameTypeAbstract() 
		{
    
    
			System.out.println("乌拉啊啊啊啊啊啊RPG");
		}
		
		
	},//这里逗号必不可少
		JRPG
		{
    
    
//			public void getGameType()
//			{
    
    
//				System.out.println("This is The JRPG game type!");
//			}

			//但没太大意义
			@Override
			public void getGameTypeAbstract() 
			{
    
    
				System.out.println("乌拉啊啊啊啊啊啊JRPG");
			}
		},
			FPS
			{
    
    
//				public void getGameType()
//				{
    
    
//					System.out.println("This is The FPS game type!");
//				}

				//所以我们一般都不在里面写抽象方法
				@Override
				public void getGameTypeAbstract() 
				{
    
    
					System.out.println("乌拉啊啊啊啊啊啊FPS");
				}
			};
	
	public abstract void getGameTypeAbstract();//声明一个抽象方法
}

GameUserable接口:

	主要用来测试枚举实现接口方法
package LessonForEnum02;

public interface GameUserable 
{
    
    
	public void enterPassword();
}

enum GameUser implements GameUserable
{
    
    
	;//枚举结构中后续没有代码的话可以不要这个分号,但是有的话必须有这个分号

	@Override
	public void enterPassword() 
	{
    
    
		System.out.println("你输入了密码");
	}
	
}

MoreGameInfor类:

	主要用来配合测试Game枚举和Game2枚举中方法以及构造方法的运行结果
package LessonForEnum02;

public class MoreGameInfor 
{
    
    
	public static String getGameNameByEnum(Game g)
	{
    
    
		switch (g)
		{
    
    
			case MARIO:
				return "这里是超级马里奥";
				
			case MONSTERHUNTER:
				return "这里是怪物猎人";
				
			case ZELDA:
				return "这里是塞尔达传说";
				
			default:
				return "cannot found the game name";
		}
	}
}

Test类

主测试类,用来测试此次日记中所学的所有东西
package LessonForEnum02;

public class Test 
{
    
    
	//可以在类中声明枚举
	public enum GameMode01
	{
    
    
		PEACE;
	}
	
	public static void main(String[] args) 
	{
    
    
		System.out.println("-----------不带参数的构造方法测试过程");
		//不带参数的构造方法测试过程
		String str1 = MoreGameInfor.getGameNameByEnum(Game.MONSTERHUNTER);
		System.out.println(str1);
		
		System.out.println("-----------带参数的构造方法测试过程");
		//带参数的构造方法测试过程
		Game g1 = Game.MARIO;
		System.out.println(g1.getGameName());
		
		System.out.println("-----------测试equals()方法");
		Game g2 = Game.MARIO;
		Game g3 = Game.MONSTERHUNTER;
		System.out.println(g2 == g3);//false
		System.out.println(g2.equals(g3));//false
		
		Game g4 = Game.MARIO;
		System.out.println(g2 == g4);//true
		System.out.println(g2.equals(g4));//true
		
		//注:即使不同枚举中的实例相同,但是只要枚举不同就不可以比较,只可以比较同一枚举中的实例
		
		System.out.println("-----------枚举内部元素的方法调用测试");
		
		Game2.FPS.getGameTypeAbstract();
		Game2.RPG.getGameTypeAbstract();
		
		Game2 g5 = Game2.JRPG;
		g5.getGameTypeAbstract();
		

	}

}

部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情.

2020.10.10
可以转载我的学习日记但请注明出处,谢谢。

猜你喜欢

转载自blog.csdn.net/SIESTA030/article/details/108994223