黑马程序员技术交流社区
标题:
抽象类问题
[打印本页]
作者:
赵亚威
时间:
2013-4-4 11:07
标题:
抽象类问题
本帖最后由 赵亚威 于 2013-4-4 18:51 编辑
public abstract class EnumDemo {
private EnumDemo(){}
public static EnumDemo ed=new EnumDemo(){
public EnumDemo method(){
return ed;
}
};
public abstract EnumDemo method();
}
抽象类不是不能创建对象嘛 为什么内部类却可以创建对象?
作者:
Friendy89
时间:
2013-4-4 11:12
抽象类特点:
1,抽象方法一定定义在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象,因为调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类 只覆盖部分抽象方法,那么该子类还是一个抽象类。
作者:
Friendy89
时间:
2013-4-4 11:16
抽象类特点:
1,抽象方法一定定义在抽象类中。
2,抽象方法和抽象类都必须被abstract关键字修饰。
3,抽象类不可以用new创建对象,因为调用抽象方法没意义。
4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类 只覆盖部分抽象方法,那么该子类还是一个抽象类。
作者:
tshch1989
时间:
2013-4-4 11:20
你的代码中创建的是匿名内部类,匿名内部类是该类的子类,已经覆盖了 public abstract EnumDemo method();方法;亲,希望对你有帮助
作者:
何俊森
时间:
2013-4-4 11:30
//匿名内部类通过实现其抽象方法,将会获得另外的实现
public static EnumDemo ed = new EnumDemo() { //获取匿名内部类实例
public EnumDemo method() { //实现了父类的抽象方法
return ed;
}
};
复制代码
创建的是抽象类的子类
匿名内部类是没有名字的,匿名内部类要重写父类或接口的方法。
作者:
杜加璇
时间:
2013-4-4 11:39
匿名内部类的格式 new 父类名或接口名(){方法(){}}; 你可以把它看为三部分 new, 父类名或接口名(), 方法(){}}; new代表的是创建新对象;父类名或接口名()这部分指的是当前这个匿名的类的父类或实现的接口;{方法(){}}; 代表的是匿名类的的类体 。所以你程序里的 匿名内部类是可以new的。
作者:
奋斗2013
时间:
2013-4-4 12:14
public static EnumDemo ed=new EnumDemo(){
public EnumDemo method(){
return ed;
}
};
你这段代码是创建匿名内部类的代码。匿名内部类继承了抽象类 EnumDemo。他是抽象类EnumDemo的实现类。当然可以构造对象了
作者:
袁杰
时间:
2013-4-4 15:47
JVM在加载类的时候,先加载父类,再加载子类,上面代码中的EnumDemo为父类, new EnumDemo(){。。。。。}是一个匿名内部类,
public EnumDemo method()方法重写了EnumDemo类的所有抽象方法“public abstract EnumDemo method(); ”此时他已经不再是一个抽象类了,
实际上在它内存中父类已经存在了
作者:
打工人
时间:
2013-4-4 16:27
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2