问题引出
我们已经知道了类,对象的一些基本知识,现在我们如果碰到了一个问题,问的是如果我们有一个季节类,我们要创建关于季节类的对象,很清楚 可以创建春夏秋冬四个对象,但是 我们通过季节类还能创造其他对象,这是我们不想要的。我们希望他只能创造这几个对象。因此引出了枚举类的概念。
枚举的实现
自定义类实现枚举
- 私有化构造器
- 去掉Set方法
- 在内部创建对象
- 如果要优化的话可以加final来修饰
- 枚举的对象名一般全部大写
enum 关键字来实现枚举
- 使用enum来替代声明类时的class
- 在类的最前面添加常量对象,形式为: 对象名(形参列表)。本质上前面有public static final 类名 修饰
- 多个常量对象用逗号隔开,而非分号,最后那个采用分号
- 如果我们使用无参构造器,则()可以省略
- 我们创建的枚举类,隐式继承Enum类
枚举类的方法
- name: 输出枚举对象的名称
- ordinal: 返回枚举对象的次序,从0开始
- values :返回了一个数组 包含了所有的枚举对象
- valueOf:输入对象名,如果在枚举类中能找到就返回,找不到就会报错
- compareTo:时对象次序相减 小于零代表前面的编号小于输入的对象,反之大于。
enum类接口问题
enum类隐式继承Enum,不能继承其他类,但是可以实现接口
注解
@interface是注解不是接口
@override
- 限定某方法是重写方法。只能用在方法。不能修饰属性,包,类。
- 放在方法上,表示重写了基类的同名方法。
- 如果没有写override,子类方法依然构成重写,那么也不会报错。
- 在重写方法之前写override是为了校验,怕出什么问题。如果 没有构成重写但是有override则会报错
@Target
是用来修饰注解的注解,称为元注解
@Deprecated
- 表示该元素已经过时了,但任然可以使用,只是不推荐。
- 可以修饰方法,类,包,参数 等
- 是用来版本升级的过度使用
SuppressWarnings
- 可以用来抑制警告,具体可以这样使用
- 在引号中加入想要的关键字
元注解
- Retention:指定注解的作用范围,主要有三个:SOURCE ,CLASS,RUNTIME
- Target:指定注解可以在那些地方使用
- Documented:指定该注解是否会在javadoc中体现
- inherited:子类会继承父类的注解