java 之 枚举

java

看了点黑马的视频,边看边试验,结合自己的理解,动手试试。

在这个示例中,将会学到内部类、枚举、接口等等

import java.util.Random;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(Fire.M4A1);
        System.out.println(Fire.RPG);
        System.out.println(Fire.MP5);
        System.out.println(Fire.SCAR);

        System.out.println("----------------------");

        System.out.println(Fire.M4A1.fire());
        System.out.println(Fire.RPG.fire());
        System.out.println(Fire.MP5.fire());
        System.out.println(Fire.SCAR.fire());

        System.out.println("----------------------");

        System.out.println(Fire.M4A1.getWeapon());
        System.out.println(Fire.RPG.getWeapon());
        System.out.println(Fire.MP5.getWeapon());
        System.out.println(Fire.SCAR.getWeapon());

    }

    // 设置开火的声音
    public String setFireSound(String sound) {
        String f = "..";
        String a = "";
        Random r = new Random(); // 种子随便
        int count = r.nextInt(10); // 获取一个10以内的随即整数

        for (int i = 0; i <= count; i++) {
            if (r.nextBoolean()) { // 随机boolean值,如果为真,weapon is broken,卡壳了
                a += "咔" + f; 
            } else {
                a += sound + f;
            }

        }
        return a;
    }

    // 这是个接口,<武器>接口
    public interface Weapon {
        public abstract String fire(); // 开火的接口
    };

    public enum Fire implements Weapon {
        /*
         * enum类只能实现接口,而没法继承。每个枚举,而有相当于enum的子类
         * 枚举后面的花括号,就相当于类的构造体,里面所实现的方法,可以是重载等等
         */
        M4A1 {
            @Override
            public String fire() {
                // 既然这个枚举类实现了武器接口,就必须实现它的方法
                String name = Fire.values()[0].toString();
                String fire = (new Test()).setFireSound("哒");
                return name + " fire-->" + fire;
            }
        },
        SCAR {
            @Override
            public String fire() {
                // 既然这个枚举类实现了武器接口,就必须实现它的方法
                String name = Fire.values()[1].toString();
                String fire = (new Test()).setFireSound("嗒");
                return name + " fire-->" + fire;
            }
        },
        MP5 {
            @Override
            public String fire() {
                // 既然这个枚举类实现了武器接口,就必须实现它的方法
                String name = Fire.values()[2].toString();
                String fire = (new Test()).setFireSound("咻");
                return name + " fire-->" + fire;
            }
        },
        RPG {
            @Override
            public String fire() {
                // 既然这个枚举类实现了武器接口,就必须实现它的方法
                String name = Fire.values()[3].toString();
                String fire = (new Test()).setFireSound("嘭");
                return name + " fire-->" + fire;
            }
        };

        /*
         * 枚举的内部方法,每个枚举都会拥有此方法,而每个枚举成员又都可以重载或覆盖此方法
         */
        public String getWeapon() {
            // this关键字,即当前的枚举
            return this.name() + " weapon";
        }

    }

}

 

输出:

M4A1
RPG
MP5S
CAR
----------------------
M4A1 fire-->咔..咔..咔..哒..咔..
RPG fire-->咔..嘭..咔..嘭..咔..嘭..嘭..嘭..嘭..嘭..
MP5 fire-->咻..咻..咔..咔..咔..
SCAR fire-->嗒..咔..嗒..嗒..嗒..
----------------------
M4A1 weapon
RPG weapon
MP5 weapon

SCAR weapon 

 

起初接触枚举是c#,转到java后一直没有关注过1.5及以后版本的新增特性,看了《thingking in java》结合视频,才发现java的灵活之处,一个枚举都异常灵活强大。

使用了enum关键字,即继承Enum类,所以enum只能实现接口,而不能多重继承了。

在枚举成员中,每个枚举成员可以看作一个对象,又像枚举的静态继承类,相当于枚举成员继承了这个枚举,从而可以扩展方法,加上花括号就行,内部怎么写东西,就像对待一般内部类一样。 

  

以上是 java 之 枚举 的全部内容, 来源链接: utcz.com/z/391426.html

回到顶部