Java抽象类中可以new对象的问题,有点看不懂,求详解,谢谢,还有内部类???

package cn.itcast.day1;public class EnumTest {public static void main(String[] args) { WeekDay2 weekday2= WeekDay2.MUN; System.out.println(weekday2.nextDay().toString()); System.out.println(weekday2.nextDay());}}
package cn.itcast.day1;public abstract class WeekDay2 {private WeekDay2() {}public final static WeekDay2 SUN = new WeekDay2(){//这里居然可以new???? @Override public WeekDay2 nextDay() { return MUN; }};public final static WeekDay2 MUN = new WeekDay2(){ @Override public WeekDay2 nextDay() { return SUN; }};public abstract WeekDay2 nextDay();public String toString(){ return this == SUN?"SUN":"MUN";}}

抽象类里当然是可以new的,这里仅仅是申明了一个对象成员,并重写了这个对象的nextDay的方法而已;另外帮你整理下代码,为什么要发两个类的代码呢...,还多个}号

package cn.itcast.day1;
public class EnumTest {
public static void main(String[] args)
{
WeekDay2 weekday2= WeekDay2.MUN;
System.out.println(weekday2.nextDay().toString());
System.out.println(weekday2.nextDay());
}
}
package cn.itcast.day1;
public abstract class WeekDay2
{
private WeekDay2() {}
public final static WeekDay2 SUN = new WeekDay2(){
//这里居然可以new????
@Override public WeekDay2 nextDay() { return MUN; }
};
public final static WeekDay2 MUN = new WeekDay2(){
@Override public WeekDay2 nextDay() { return SUN; }
};
public abstract WeekDay2 nextDay();
public String toString(){
return this == SUN?"SUN":"MUN";
}
}追问

我不理解的是WeekDay2是一个抽象类,怎么能new 呢?

追答

抽象类不能直接new,但是可以通过算隐式内部类重写其抽象方法来new

比如
public abstract class A {
public static void main(String args){
A a = new A(){};
}
}
你不加{}就不行,虽然我没写任何抽象方法

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-02
。。。。。。能编译通过么?追问

可以的,我试过了

第2个回答  2012-11-02
大哥,这代码可读性也太次了把追问

我直接复制的,没想到是这样的效果,如果你把他复制到eclipse中ctrl+shift+f一下,应该会被格式话吧。呵呵

相似回答