黑马程序员技术交流社区

标题: 匿名内部类问题 [打印本页]

作者: て淡莣了陌生    时间: 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方法啊
必须写成这样
  1. class Object
  2. {
  3.         public void show(){}
  4. }

  5. class Demo1 extends Object
  6. {
  7.          public static void main(String[] args)
  8.          {
  9.                  Object obj = new Object()
  10.                                  {                        
  11.                      public void show()
  12.                                          {
  13.                                                 System.out.println("show");
  14.                      }
  15.                  };
  16.                                  obj.show();
  17.          }
  18. }
复制代码

作者: 陈雪琪    时间: 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