for java beginner 7 JDK的枚举高级玩法

实现带抽象方法的枚举

现在看来,不管是自己写还是JDK里的
枚举都是一个 类

大部分写 枚举 都把它当内部类

现在说一下,内部类 可以用那 四个 访问修饰符
[和方法 和 成员变量 平级的]

外部的类只有两个 public 和 默认的



---------------------------

package com.ncs;

public class EnumWithAbstractMethod {

	public static void main(String[] args) {

	}
	
	public enum TrafficLights{
		RED{
			public TrafficLights nextLight(){
				return GREEN;
			}
		}
		,GREEN{
			public TrafficLights nextLight(){
				return YELLOW;
			}
		},
		YELLOW{
			public TrafficLights nextLight(){
				return RED;
			}
		};
		//每个灯都有下一个灯的方法,
		//我们用 抽象 方法
		public abstract TrafficLights nextLight();
		//上面这行不行的,需要你里面的 constants 实现 方法
		//所以在RED后面的一对{}表示一个子类的实现,子类的名字不知道
	}

}


--------------------------------------
上面还没有时间,再弄个时间

package com.ncs;

public class EnumWithAbstractMethod {

	public static void main(String[] args) {
		TrafficLights trafficLights = TrafficLights.GREEN;
		System.out.println(trafficLights.time); //30
		trafficLights = TrafficLights.YELLOW;
		System.out.println(trafficLights.time); //3
	}
	
	public enum TrafficLights{
		RED(30){
			public TrafficLights nextLight(){
				return GREEN;
			}
		}
		,GREEN(30){
			public TrafficLights nextLight(){
				return YELLOW;
			}
		},
		YELLOW(3){
			public TrafficLights nextLight(){
				return RED;
			}
		};
		//每个灯都有下一个灯的方法,
		//我们用 抽象 方法
		public abstract TrafficLights nextLight();
		//上面这行不行的,需要你里面的 constants 实现 方法
		//所以在RED后面的一对{}表示一个子类的实现,子类的名字不知道
		
		private int time;
		//构造方法只可以是private
		//然后上面出错了 修改 加() 就完全OK了
		private TrafficLights(int time){this.time = time;}
	}

}
---
---------非常不错

小知识
new Date(){}; 表示 是 new Date类的子类,子类的 构造方法call Date类的无参
构造方法,
假如现在希望call Date类的有参构造方法
可以这样写:
new Date(50000){};


知道了
  • 内部类
  • 类可以返回自己的类型 [人返回配偶肯定也是一个人,不会是动物]
  • 类里可以有 静态 常量,指向自己的一个实例对象

思想:
枚举只有一个成员时,就可以作为一种单例的实现方式。
1,枚举就是一个类
2,构造方法默认就是私有的,不带参数
3,new方法也是自动写好的

你可能感兴趣的:(java,jdk)