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

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

  

posted on   黑暗伯爵  阅读(354)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

< 2011年5月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11

统计

点击右上角即可分享
微信分享提示