A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2012 中级黑马   /  2013-9-14 13:09  /  1610 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-16 17:09 编辑

关于枚举的基本使用方法,我能理解。大家都知道枚举就是一个特殊的类 ,他和普通类一样,都可以实现一个或多个接口,同样可以包含抽象方法。
关于枚举实现接口或包含抽象方法,非常模糊。希望那问大神能详细的帮我解答一下。
比如枚举实现接口,肯定会实现接口中的所有方法。怎么让枚举中的不同对象,调用同一个方法出现不同的结果?
关于包含抽象方法,这个一点都不明白,不知道怎么去重写这个抽象方法?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 罗凯健 于 2013-9-14 14:07 编辑

实现接口部分, 你可以去JDK里面找一下枚举的values()方法。
---稍等一下,我去试试= =
回复 使用道具 举报
不知道你要的是什么效果,随便写了个。
接口:
public interface Test {
        public void prints();
}

实现类是张老师的交通灯那个灯类,我只把实现方法写一下:

@Override
        public void prints() {
                // TODO Auto-generated method stub
                System.out.println(this.name());
               
        }

调用prints方法就会打印出调用者的名字。貌似跟普通类差不多
回复 使用道具 举报
本帖最后由 code_geass 于 2013-9-14 15:18 编辑
  1. //枚举一般定义方式,每一个元素都是枚举的实例对象。我理解为空参数空方法。
  2. /*
  3.    public enum Fruits{
  4.         APPLE,PEACH,PEAR
  5. }
  6. */
  7. /*如果需要在枚举中定义构造方法。方法或者抽象方法时。需要在最后一个元素后加;(分号)后面写对应的方法。不管是实现的接口,还是自己定义的抽象方法。包括构造方法。都在枚举的实例对象中实现。*/
  8. public enum Fruits implements Runnable {
  9.         APPLE(1){
  10.                 public void run(){}
  11.                 public  void show(){}
  12.         },PEACH(2){
  13.                 public void run(){}
  14.                 public  void show(){}
  15.         }
  16.         ,PEAR(3){
  17.                 public void run(){}
  18.                 public  void show(){}
  19.         };
  20.         //定义构造方法必须为private
  21.         private Fruits(int num){}
  22.         //定义抽象方法
  23.         public abstract void show();
  24.         
  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
实现带有抽象、构造方法的枚举:

public enum TrafficLamp{
    RED(30){
        public TrafficLamp nextLamp(){
           return GREEN;
        }
    },
    GREEN(40){
        public TrafficLamp nextLamp(){
           return YELLOW;
        }
    },
    YELLOW(5){
        public TrafficLamp nextLamp(){
           return RED;
        }
    };
    public abstract TrafficLamp nextLamp();
    private int time;
    private TrafficLamp(int time){this.time =time;}
}
在这个例子中,枚举TrafficLamp的三个成员RED,GREEN,YELLOW先调用TrafficLamp的带有int类型参数的构造方法创建,再实现枚举中的抽象方法nextLamp(),RED,GREEN,YELLOW调用同一个nextLamp()方法,分别返回的是自己的下一个灯,即调用同一个方法返回不同的结果,是一个比较复杂的枚举。


评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
  1. public interface Behaviour {  
  2.     void print();  
  3.     String getInfo();  
  4. }  
  5. public enum Color implements Behaviour{  
  6.     RED("红色", 1), GREEN("绿色", 2),YELLO("黄色", 3);  
  7.     // 成员变量  
  8.     private String name;  
  9.     private int index;  
  10.     // 构造方法  
  11.     private Color(String name, int index) {  
  12.         this.name = name;  
  13.         this.index = index;  
  14.     }  
  15. //接口方法  
  16.     @Override  
  17.     public String getInfo() {  
  18.         return this.name;  
  19.     }  
  20.     //接口方法  
  21.     @Override  
  22.     public void print() {  
  23.         System.out.println(this.index+":"+this.name);  
  24.     }  
  25. }  
复制代码
希望这个能帮的上你

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
楼主,你好!

如果您的问题解决了,请把您问题的未解决更改为已解决


谢谢合作!

回复 使用道具 举报
public class EnumTest02 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Person p=Person.one;
                p.lie();
                p.rice();
        }
       
        interface  sleep{
                public void lie();
        }
        interface eat{
                public void rice();
        }
       
        public enum Person implements sleep,eat{
                one,two,three;
                private Person(){}
                public void lie(){
                        System.out.println("躺着睡");
                }
               
                public void rice(){
                        System.out.println("吃饭");
                }
               
        }

}

希望这代码能够解决你的问题。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马