`

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

 
阅读更多
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();
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics