黑马程序员技术交流社区

标题: 枚举中的匿名内部类,求详解? [打印本页]

作者: 谢波    时间: 2013-2-15 10:23
标题: 枚举中的匿名内部类,求详解?
本帖最后由 谢波 于 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个匿名内部类
但是没见过这样的匿名内部类啊,求详解。。。
作者: 李大强    时间: 2013-2-16 10:49
你之所以问这个问题其实就是你对枚举的“匿名内部类”还没有完全了解:

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

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

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

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


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


这就是出现了“5个class文件”的原因!
作者: 谢波    时间: 2013-2-16 22:26
谢谢了哈。。。
作者: 刘军亭    时间: 2013-2-17 16:20
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一个子类                                                                                对象去实现抽象方法才可以。
        }
作者: 黑马斯巴达    时间: 2013-2-25 09:49
学习喽。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2