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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭军亮 中级黑马   /  2013-4-26 11:31  /  1624 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这个程序中,RED,GREEN,YELLOW这些是enum的子类还是enum的对象啊,我一直看不懂这个问题。请各位详解一下。。。。谢谢了
public class EnumTest {

        public static void main(String[] args) {
               
        }
        public enum TrafficLamp{
                RED(30){
                        public  TrafficLamp nextLamp(){
                                return GREEN;
                        }
                },
                GREEN(45){
                        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;}
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 乘鱼飞 于 2013-4-26 12:09 编辑

是enum的子类,实现抽象方法

枚举:可认为是实例已经固定的类。

枚举类可以有属性、方法、私有化构造器、初始化块、内部类。
枚举类的格式:
[修饰符] enum 枚举名
{
//第一行该枚举的所有的实例
}

枚举的修饰符中abstract,final两者选其一,
如果枚举中已经有了抽象方法,该枚举默认由abstract修饰,
此时该枚举没有final修饰,
此时枚举类是一个抽象类,不能被实例化,
只能实例化它的子类,通过匿名内部类来实现抽象类(如:RED)。

哎,真纠结啊

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
他原本是 public enum TrafficLamp{
                RED,GREEN,YELLOW;
             }
这样的,其中的每一个都是枚举的一个实例对象。
写成上面那种模式是为枚举的实例对象传入了构造时所需的参数和覆盖了抽象的方法。
他是一个比较特殊的类,但是也还是类。
回复 使用道具 举报
那么请问那个RED,GREEN,YELLOW到底是子类还是对象呢?
回复 使用道具 举报
RED,GREEN,YELLOW  相当于本类的对象   如果在枚举中创建抽象方法  那就相当于不能实例化对象只能创建子类对象
回复 使用道具 举报
你可以模拟一个枚举就知道了   在本类中new一个本类的对象  然后在创建 抽象方法   这时候就提示不能创建对象了  
回复 使用道具 举报
在以上的程序中,RED,GREEN,BLUE是枚举类TrafficLampd的三个对象,因为此枚举类中有抽象方法,所以在创建对象时复写了抽象方法。它们是匿名内部内的形式创建的,说白了就是一个对象;
回复 使用道具 举报
黄玉昆 黑马帝 2013-4-27 20:11:36
8#
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马