【Java】Enum类的常用方法、实现接口及其实际应用
Enum类的常用方法
- package com.star.enum03;
- /**
- * @author : Starshine
- */
- public class TestSeason {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- //用enum关键字创建的Season枚举类上面的父类是:java.lang.Enum,常用方法子类Season可以直接拿过来使用:
- //toString();--->获取对象的名字
- Season autumn = Season.AUTUMN;
- System.out.println(autumn/*.toString()*/);//AUTUMN
- System.out.println("--------------------");
- //values:返回枚举类对象的数组
- Season[] values = Season.values();
- for(Season s:values){
- System.out.println(s/*.toString()*/);
- }
- System.out.println("--------------------");
- //valueOf:通过对象名字获取这个枚举对象
- //注意:对象的名字必须传正确,否则抛出异常
- Season autumn1 = Season.valueOf("AUTUMN");
- System.out.println(autumn1);
- }
- }
枚举类实现接口
定义一个接口:
- public interface TestInterface {
- void show();
- }
枚举类实现接口,并且重写show方法:
- public enum Season implements TestInterface {
- SPRING,
- SUMMER,
- AUTUMN,
- WINTER;
- @Override
- public void show() {
- System.out.println("这是Season....");
- }
- }
测试类:
- public class Test {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- Season autumn = Season.AUTUMN;
- autumn.show();
- Season summer = Season.SUMMER;
- summer.show();
- }
- }
上面发现所有的枚举对象,调用这个show方法的时候走的都是同一个方法,结果都一样:
但是现在我想要:不同的对象 调用的show方法也不同:
- package com.star.enum04;
- import java.sql.SQLOutput;
- public enum Season implements TestInterface {
- SPRING{
- @Override
- public void show() {
- System.out.println("这是春天。。。");
- }
- },
- SUMMER{
- @Override
- public void show() {
- System.out.println("这是夏天。。");
- }
- },
- AUTUMN{
- @Override
- public void show() {
- System.out.println("这是秋天");
- }
- },
- WINTER{
- @Override
- public void show() {
- System.out.println("这是冬天");
- }
- };
- /*@Override
- public void show() {
- System.out.println("这是Season....");
- }*/
- }
测试类:
- public class Test {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- Season autumn = Season.AUTUMN;
- autumn.show();
- Season summer = Season.SUMMER;
- summer.show();
- }
- }
实际应用
- package com.star.enum05;
- /**
- * @author : Starshine
- */
- public class Person {
- //属性:
- private int age;
- private String name;
- private Gender sex;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Gender getSex() {
- return sex;
- }
- public void setSex(Gender sex) {
- this.sex = sex;
- }
- @Override
- public String toString() {
- return "Person{" +
- "age=" + age +
- ", name='" + name + '\'' +
- ", sex='" + sex + '\'' +
- '}';
- }
- }
- public enum Gender {
- 男,
- 女;
- }
- public class Test {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- Person p = new Person();
- p.setAge(19);
- p.setName("lili");
- p.setSex(Gender.男);//传入枚举类Gender的对象:-->在入口处对参数进行了限制
- System.out.println(p);
- }
- }
还可以通过枚举结合switch处理:
- public class Test02 {
- //这是一个main方法,是程序的入口:
- public static void main(String[] args) {
- Gender sex = Gender.男;
- //switch后面的()中可以传入枚举类型
- //switch后面的():int,short,byte,char,String ,枚举
- switch (sex){
- case 女:
- System.out.println("是个女孩");
- break;
- case 男:
- System.out.println("是个男孩");
- break;
- }
- }
- }