欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

枚举类:实现接口的枚举类

程序员文章站 2022-05-21 21:41:51
...
package org.lgy.study.enumstudy;

public interface GenderDesc{
	void info();
}

 

package org.lgy.study.enumstudy;

/*
枚举类也可以实现一个或多个接口,与普通类实现一个或多个接口完全一样。
枚举类实现一个或多个接口时,也需要实现该接口所包含的方法。
*/
public enum Gender implements GenderDesc{
	MALE("男"),FEMALE("女");
	
	private String sex;
	
	private Gender(String sex){
		this.sex = sex;
	}
	
	public void info(){
		System.out.println(this + "  " + sex);
	}
}

 

package org.lgy.study.enumstudy;

/*
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式(因为方法体是一样的)。
如果需要每个枚举值在调用该方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,
每个枚举值提供不同的实现方式,从而让不同的枚举值调用该方法时具有不同的行为方式。
*/
public enum Gender implements GenderDesc{
	/*
	这种用法有点儿类似于匿名内部类,花括号部分实际上就是类体部分,我们也可以认为这是一个匿名内部类。
	这个匿名内部类实现了本来改由枚举类实现的抽象方法,所以我们又可以认为这个匿名内部类是原来枚举类的一个匿名子类。
	由于枚举类的实例默认使用public static final修饰,所以这个匿名类是一个静态的匿名类,
	也就不能在这个匿名类里使用外部类的非静态成员。
	
	在这种情况下,当创建MAEL、FEMALE枚举值时,并不是创建Gender枚举类的实例,
	而是相当于创建Gender的匿名子类的实例。
	*/
	MALE("男")
	{
		public void info(){
			System.out.println("MALE:");
			//System.out.println(this + "  " + sex);
		}
	},
	FEMALE("女")
	{
		public void info(){
			System.out.println("FEMALE:");
			//System.out.println(this + "  " + sex);
		}
	};
	
	private String sex;
	
	private Gender(String sex){
		this.sex = sex;
	}
	
	/*
	public void info(){
		System.out.println(this + "  " + sex);
	}
	*/
}

 

package org.lgy.study.main;

import org.lgy.study.enumstudy.*;

public class GenderMain{
	public static void main(String[] args){
		Gender g = Gender.MALE;
		g.info();
		g = Gender.FEMALE;
		g.info();
	}
}