黑马程序员技术交流社区
标题:
枚举中的匿名内部类,求详解?
[打印本页]
作者:
谢波
时间:
2013-2-15 10:23
标题:
枚举中的匿名内部类,求详解?
本帖最后由 谢波 于 2013-2-21 13:05 编辑
public class EnumTest {
public static void main(String[] args) {
WeekDay w = WeekDay.TUS;
System.out.println(w);
System.out.println(w.nextDay());
}
//枚举
public enum WeekDay{
SUN(){
public WeekDay nextDay(){
return MON;
}
},MON(){
public WeekDay nextDay(){
return TUS;
}
},TUS(){
public WeekDay nextDay(){
return SUN;
}
};
private WeekDay(){}
public abstract WeekDay nextDay();
}
复制代码
运行后,发现有 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