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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢波 中级黑马   /  2013-2-15 10:23  /  2455 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢波 于 2013-2-21 13:05 编辑
  1. public class EnumTest {

  2.         public static void main(String[] args) {
  3.                 WeekDay w = WeekDay.TUS;
  4.                 System.out.println(w);
  5.                 System.out.println(w.nextDay());
  6.         }
  7.         //枚举
  8.         public enum WeekDay{
  9.                 SUN(){
  10.                         public WeekDay nextDay(){
  11.                                 return MON;
  12.                         }
  13.                 },MON(){
  14.                         public WeekDay nextDay(){
  15.                                 return TUS;
  16.                         }
  17.                 },TUS(){
  18.                         public WeekDay nextDay(){
  19.                                 return SUN;
  20.                         }
  21.                 };
  22.                 private WeekDay(){}
  23.                 public abstract WeekDay nextDay();
  24.         }
复制代码
运行后,发现有 5 个class文件
EnumTest.class  
EnumTest$WeekDay.class  
EnumTest$WeekDay$1.class
EnumTest$WeekDay$2.class
EnumTest$WeekDay$3.class
那也就是说在WeekDay类里面还有3个匿名内部类
但是没见过这样的匿名内部类啊,求详解。。。

评分

参与人数 1技术分 +1 收起 理由
职业规划-张琼老师 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
你之所以问这个问题其实就是你对枚举的“匿名内部类”还没有完全了解:

首先,在你的枚举类中你定义了一个一个抽象方法“ public abstract WeekDay nextDay();”吧?

其次,在你的枚举类中你又定义了三个成员“SUN,MON,THS”吧?

再次,当你的“WeekDay”类为抽象类时,其中的三个子类必须实现其中的抽象方法吧?

所以,三个成员总共加起来也就有了三个匿名内部类了吧?


所以,加上“EnumTest”和“WeekDay”,程序中就一共出现了五个类吧?


这就是出现了“5个class文件”的原因!

评分

参与人数 1技术分 +1 收起 理由
职业规划-张琼老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢了哈。。。
回复 使用道具 举报
public enum WeekDay{
                SUN(){                                               //这里创建的每一对象都是WeekDay的子类对象,他实现了父类的抽象方法,
                        public WeekDay nextDay(){      //他们三个对象都相当于一个类。
                                return MON;
                        }
                },MON(){
                        public WeekDay nextDay(){
                                return TUS;
                        }
                },TUS(){
                        public WeekDay nextDay(){
                                return SUN;
                        }
                };
                private WeekDay(){}
                public abstract WeekDay nextDay();//这里是抽象方法,当类有抽象方法时就无法再去new一个对象,只有new一个子类                                                                                对象去实现抽象方法才可以。
        }

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
学习喽。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马