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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 菠萝鱼 中级黑马   /  2014-2-15 22:17  /  1348 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public enum Tra{
        RED(3){
        public Tra nextLamp(){return GREEN;}       
                },
        GREEN(4){
        public Tra nextLamp(){return YELLOW;}               
                },       
        YELLOW(5){
        public Tra nextLamp(){return RED;}                       
                };
        public abstract Tra nextLamp();//抽象方法
        private int time;
        private Tra(int time){this,time=time;}//带参数的构造函数
}
这个枚举类  定义了三个Tta类型的属性 RED,GREEN,YELLOW,后面大括号里的抽象方法应该怎么理解?

评分

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

查看全部评分

7 个回复

倒序浏览
父类有抽象方法,肯定是等着子类重写属于自己的该方法。
对于上述代码来说,个人理解,应该是三个属性通过类似于实现接口的形式,重写了各自的nextLamp方法,以获取不同的返回值。

评分

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

查看全部评分

回复 使用道具 举报 1 0
改为匿名类,每个颜色对象,后面实现抽象类的抽象方法,颜色后面的数字是传给构造函数用的!
回复 使用道具 举报
枚举中定义了三个属性,对于这三个属性来说可以理解成子类的对象,枚举可以理解成一个类class,这个类有抽象方法,需要子类重写实现该抽象方法。而该对象只需要实现且只使用一次该方法,所以采用了匿名类的方式,将该抽象方法重写了各自的nextLamp方法,以获取不同的返回值。我是这样理解的。

评分

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

查看全部评分

回复 使用道具 举报
只要枚举类型 中含有抽象方法,定义属性时就必须实现这个抽象方法。理解为子类对象必须重写父类抽象方法。
回复 使用道具 举报
RED,GREEN,YELLOW这些元素是由Tra的子类实现的
回复 使用道具 举报
一年_Hei 来自手机 中级黑马 2014-2-16 22:37:37
7#
枚举就相当一个特殊的java类,它的构造方法的权限为私有。而枚举的每个元素就相当于这个类的实际对象。如果这个枚举有抽象方法。那么必须实现这个抽象方法才能创造它的实例对象。因为枚举的元素就是它的实例对象,所以必须通过匿名内部类的方式重写枚举的抽象方法
回复 使用道具 举报
枚举的每个元素都是它的实例对象,那后天的大括号里面的内容就是该对象实现其抽象方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马