package senssic.demo;
/**
* 枚举jdk1.5后新特性,可以限定范围等作用,枚举类不能被扩展,即不能继承,不能作为超类,隐式继承Enum类,可以实现接口
*
* @author Administrator
*
*/
interface A {
public void pp();
}
public class EnumClass {
// 默认enum类型继承Enum类
enum Grade implements A {// 此处枚举类型可以是private,protected,public和默认的范围,注意可以是public,即一个类中可以有两个public类型的一个是类,一个是枚举类
大一() {
@Override
public void p() {// 此处只为实现,外部声明了抽象方法因此可以被外部调用此方法
System.out.println("我实现了抽象方法法!我是:" + Grade.大一);
}
public void a() {// 枚举对象中声明的方法将永远无法被使用,外部看不到方法(编译器认为所有的枚举对象都是枚举类的实例,不能搞特殊),枚举的方法只能在枚举类中声明
System.out.println("我是某个类中的方法");
}
},
大二(2) {
@Override
public void p() {
System.out.println("我实现了抽象方法法!我是:" + Grade.大二);
}
},
大三 {
@Override
public void p() {
System.out.println("我实现了抽象方法法!我是:" + Grade.大三);
}
},
大四(4) {
@Override
public void p() {
System.out.println("我实现了抽象方法法!我是:" + Grade.大四);
}
};// 可以用汉字因为,java变量可以使用汉字表示
private Grade() {// 无参构造方法
System.out.println("无参构造!");
}
private Grade(int i) {// 有参构造方法
System.out.println("有参构造,参数为:" + i);
}
public abstract void p();// 定义抽象函数(必须是public或protected),如果定义则每个枚举对象必须都实现
@Override
public void pp() {
System.out.println("实现了接口的抽象方法:" + this.toString());// 为每个枚举对象实现接口的抽象方法,并且打印出是谁被实例化
}
}
public static void main(String[] args) {
Grade grade = Grade.大一;// 运行此句时候将会执行枚举类中的4个枚举对象的构造方法(即实例化枚举对象),依次执行
Grade grade2 = Grade.大二;// 不再执行构造方法,上句已经执行完毕,不再实例化对象且不再执行构造函数
System.out.println(grade instanceof Grade);// 是Grade枚举类的实例
System.out.println(grade2 instanceof Grade);// 也是Grade枚举类的实例
// 对象一些方法
System.out.println(grade);// 调用默认toString()方法
System.out.println(grade.name());// 返回枚举常量名
System.out.println(grade.ordinal());// 返回枚举常量的序号
// 类的静态方法
System.out.println(Grade.valueOf("大一"));// 通过传入字符串获得枚举对象,本方法生成对象调用toString方法
for (Grade g : Grade.values()) {
System.out.println(g.toString());// 打印类中所有枚举对象,调用的是values()方法
}
// 调用抽象枚举类方法
grade.p();
// 调用实现接口的抽象方法
grade.pp();
// grade.a();//因为是单个枚举对象中的方法,所以此方法无法被外部访问到
switch (grade) {// 使用switch操作枚举类
case 大一:
System.out.println("选择的是大一!");
break;
default:
System.out.println("选择的不是大一!");
break;
}
}
}
java枚举
最新推荐文章于 2024-07-19 13:46:52 发布