黑马程序员技术交流社区
标题:
匿名内部类问题
[打印本页]
作者:
cqdouble
时间:
2014-5-19 09:44
标题:
匿名内部类问题
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
int x = 3;
public void function()
{
AbsDemo d = new AbsDemo() //AbsDemo是一个抽象类,不可以用new创建对象呀,这么怎么可以呢?
{
int num = 9;
void show()
{
System.out.println("num==="+num);
}
void abc()
{
System.out.println("haha");
}
};
d.show();
}
}
class InnerClassDemo4
{
public static void main(String[] args)
{
new Outer().function();
}
}
复制代码
AbsDemo是一个抽象类,不可以用new创建对象呀,这么怎么可以呢?
作者:
李维奥
时间:
2014-5-19 11:02
实际上创建的是AbsDemo的一个子类,他继承了AbsDemo类,并且实现了AbsDemo中的方法:
关于匿名内部类
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。
5,匿名内部类中定义的方法最好不要超过3个。
作者:
heima_xyu
时间:
2014-5-19 11:17
因为匿名内部类,是创建子类。定义匿名内部类的前提:
内部类必须继承一个类或者实现接口。
用new创建的对象并不是该抽象类的对象,而是它子类的对象。定义匿名内部类,是因为临时需要继承实现某些方法,而达到省去重新建立新的类的麻烦。
作者:
mayor125
时间:
2014-5-19 11:44
本帖最后由 mayor125 于 2014-5-19 11:45 编辑
AbsDemo d = new AbsDemo()这条语句中的new AbsDemo()表示的是AbsDemo这个类的子类,用父类引用接收子类对象,这是多态的表现形式。
因为匿名内部类没有名字,也就无法调用匿名内部类当中定义的多个方法,但是却可以给匿名内部类起个名字,用父类进行接收,也就是AbsDemo d,这样就可以通过对象的形式调用匿名内部类当中的方法。
作者:
茄子
时间:
2014-5-19 12:11
同意楼上沙发所说!!!
作者:
雨落千木的时节
时间:
2014-5-19 12:25
这里new的不是AbsDemo类,而是AbsDemo类的子类,这个类是匿名类,使用AbsDemo类型的变量d指向这个匿名类(即多态中的父类引用指向子类对象)
作者:
段兆洋
时间:
2014-5-19 15:37
本帖最后由 段兆洋 于 2014-5-19 15:39 编辑
他们说的太罗嗦了,估计楼主应该是没注意一点:AbsDemo d = new AbsDemo() 这句后面没有分号好么?! 有分号才是一句话,就是创建对象,没有分号,后面{}这是匿名内部类好么
也就是
AbsDemo d = new AbsDemo();
AbsDemo d = new AbsDemo()
{...}
两者你要区分开
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2