枚举类要点总结

#枚举中的values
枚举中的values方法在api中找不到,但是确实可以用的,values()方法返回的是枚举中的值,我们可以通过这个方法得到枚举值。

enum Season2{
	SPRING("春天"),
	SUMMER("夏天"),
	AUTUMN("秋天"), //AUTUMN,表示无参构造方法时的创建方法	//若是加上有参的构造方法时就不是这样了
	//有参的构造方法需要在里面加上参数,现在写的就是了。
	WINTER("冬天");
	//若是加上有参的构造方法时就不是这样了
	String name;
	Season2(String name)//构造方法为private但是可以省略,默认的,就跟接口中默认公开抽象方法,公开静态//     常量的属性一样。
	{
		this.name=name;
	}
	public String getName(){
		return name;
	}
	
}

以上便是创建的一个枚举类了。
同时我们也可以,用一个类来创建一个枚举类:

class Season1{
	String name;
	//饿汉式,在类加载的时候就创建了
	public static final Season1 SPRING = new Season1("春天");//属性可以是一个类的对象。
	public static final Season1 SUMMER = new Season1("夏天");
	public static final Season1 AUTUMN = new Season1("秋天");
	public static final Season1 WINTER = new Season1("冬天");
	private Season1(String name){///这时的private就不可以省略了
		this.name = name;
	}
	public String getName(){
		return name;
	}
	
}

上面的这个类跟最上头的枚举是一样的实现,两个一样的效果但是枚举比较简单方便。
以下是主方法的实现:

public class TestEnum {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Season1 s1 = Season1.AUTUMN;
		Season2 s2=Season2.SUMMER;
		Season2[] ss=Season2.values();//values()方法的使用,利用数组装返回的枚举值。返回的这里一定要是数组的形式,不然会报错,因为不只是一个枚举值。
		for(Season2 s:ss)
			System.out.println(s.ordinal()+":"+s.name()+" "+s.getName());
		

	}

}

枚举的所有方法

枚举的所有方法截图,里面有一个ordinal()方法,可以向数组一样返回枚举的下标,从零开始的。还有另一个方法name()方法,返回的是枚举名。
程序运行结果如下:

0:SPRING 春天
1:SUMMER 夏天
2:AUTUMN 秋天
3:WINTER 冬天

#总结几个小点
1、枚举中的构造方法修饰符默认为private不用写。
2、枚举用逗号隔开,最后一个用分号,表示枚举个数结束。
3、枚举中有一个values()方法API查不到。
4、所有的枚举类都是Enum的子类,所以都不能再继承其他的类了,但是可以实现接口。
5、枚举类中所有的构造方法都是私有的,所以枚举类不可以有子类,因为在子类中会默认有一句话:super();因为在创建子类的时候会先创建父类,调用父类的构造的方法,如果父类有多个构造方法,而且我们没有指定的时候,会默认调用super(),父类的无参构造方法。

class A{
	private A(){}
	
}
class B extends A{//报错
	
}

6、虽然枚举类不可以有子类继承,但是枚举中是可以有抽象方法的,既然没有子类去继承那么怎么去实现这个抽象方法?枚举中的抽象方法是让枚举中的枚举值实现的。具体例子如下:

enum Operation{
	ODDITION{
		public double calculation(double a,double b){
			return a+b;
		}
		
	},
	SUBTRATION{
		public double calculation(double a,double b){
			return a-b;
		}
	},
	MULTIPLICATION{
		public double calculation(double a,double b){
			return a*b;
		}
	},
	DIVISION{
		public double calculation(double a,double b){
			return a/b;
		}
	};
	public abstract double calculation(double a,double b);
}

实际上也就是一个匿名内部类,匿名内部类实际上就是将实现接口的代码和创建累的对象的代码结合起来,形成特色的语法。

enum A{
	SUM;
}

如上面的这个枚举,如果是用类去实现的话就是:

class AA{
	public static final AA a1=new AA();
}

那么:

enum A{
	SUM{
		public double calculation(double a,double b){
			return a/b;
		}
	};
}

就相当于:

class AA{
	public static final AA a1=new AA(){
		public double calculation(double a,double b){
			return a/b;
		}		
	};
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值