实现带抽象方法的枚举
现在看来,不管是自己写还是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方法也是自动写好的