黑马程序员技术交流社区
标题:
匿名内部类问题
[打印本页]
作者:
て淡莣了陌生
时间:
2013-4-27 08:10
标题:
匿名内部类问题
本帖最后由 て淡莣了陌生 于 2013-4-27 11:02 编辑
class Demo1
{
public static void main(String[] args)
{
Object obj=new Object(){
public void show(){
System.out.println("show");
}
};
obj.show();
}
}
class Demo2
{
public static void main(String[] args)
{
new Object(){
public void show(){
System.out.println("show");
}
}.show();
}
}
以上两段代码,Demo1是利用引用调show方法,Demo2是直接用对象调show方法,不都是一样的吗,为什么运行Demo1的时候会报错,而Demo2能够正常运行呢?求解释!!
作者:
殇_心。
时间:
2013-4-27 08:22
首先Demo1是父类引用指向子类对象。(多态)
而父类里面是没有show这个方法时,是会编译错误的。
而下面的是子类对象直接调用自己的函数,这样显然是可以的。
作者:
刘胜寒
时间:
2013-4-27 08:39
第一个会报错是因为
匿名内部类只能使用一次...
也就是说当遇到“;”结束时;
你的Object的对象就没有了show方法。
所以在编译期报错...
作者:
刘海东
时间:
2013-4-27 09:28
本帖最后由 刘海东 于 2013-4-27 09:36 编辑
匿名内部类就是内部类的简写,用于简化代码
既然是简写的话就会有一些局限性:
1、因为没有名字,所以只能使用一次
2、必须继承一个父类或实现一个接口
你这个Object里面没有show方法啊
必须写成这样
class Object
{
public void show(){}
}
class Demo1 extends Object
{
public static void main(String[] args)
{
Object obj = new Object()
{
public void show()
{
System.out.println("show");
}
};
obj.show();
}
}
复制代码
作者:
陈雪琪
时间:
2013-4-27 09:40
手机党码字挺痛苦的。。
不过这个我懂就来说说咯
你的Demo1中,注意你创建的那个对象其实是Object子类对象,而Object父类引用指向子类对象就是多态了。
在多态那一章可以知道,非静态成员函数编译看左边运行是看右边的 ,所以编译是会出错的,因为父类并没有show方法。
而demo2中,是建立一个object子类对象并直接调用,与多态是无关的,所以编译可以通过。
不知道有木有说清楚呀。。。
作者:
袁梦希
时间:
2013-4-27 10:51
楼主你好 如果问题已经解决了,请把帖子的类型改为“已解决”
{:soso_e181:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2