• 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只能实现接口,而不能多重继承了。

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

      

  • 相关阅读:
    构建之法第二次作业
    wav音频的剪切
    构建之法结对编程
    模拟数据库事务实现转账
    Quirks模式是什么?它和Standards模式有什么区别
    CSS都有哪些选择器?
    简述渐进增强和优雅降级之间的不同?
    市面上浏览器的内核分别是什么?有哪些?
    html与xhtml有什么区别?
    关于对WEB标准以及W3C的理解与认识问题
  • 原文地址:https://www.cnblogs.com/hangxin1940/p/2039470.html
Copyright © 2020-2023  润新知