A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟佩桓 中级黑马   /  2013-4-11 00:54  /  1328 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟佩桓 于 2013-4-11 11:32 编辑

看到毕老师的匿名内部类这儿了 ,感觉头都大了···始终搞不明白
show(new Inter()
                {
                        public void method()
                        {
                                System.out.println("method show run");
                        }
                });

        }

        public static void show(Inter in)
        {
                in.method();
        }
}

这个代码谁能帮我分析讲解下  ,我还是不明白。最好再给我说下匿名内部类该怎么写,始终不会。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
把老师的视频多看几次,自己多写几次代码,自然就明白了,没有谁比老师讲得更好的了。
回复 使用道具 举报
本帖最后由 杨成 于 2013-4-11 01:47 编辑

可以这么理解:
new Inter()      这个是创建匿名对象(Inter是要创建的子类的父类名,因为多态,所以省略了名字,直接写它要继承的父类名)。
new Inter(){public void method(){...}}   这个是创建匿名对象,让匿名子类继承父类,添加的新方法method()。
show(new Inter(){public void method(){...}} );   show函数的参数是Inter类型,就是匿名类的父类类型,原因是多态(详细多态请复习多态)。
这样当调用show方法时,就会传递进去一个new Inter(){public void method(){...}}  继承父类Inter的匿名的类并且集成了method方法的对象,之后调用该对象的method方法。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
匿名内部类是局部内部类的一种特殊情况,它本身无名,当然也就没有构造器了。申明它时必须修同时建立匿名内部类对象。且用的是父类名或其实现的接口名称。由于它在方法中申明。所以可以把它看成实现了某种功能的代码块(被匿名内部类封装)。要调用匿名内部类方法,可将其向上转型成父类或接口来使用。所以上面的代码就好理解了。show(new Inter()
                {
                        public void method()
                        {
                                System.out.println("method show run");
                        }
                });

        }//在方法中定义 匿名内部类。(
public static void show(Inter in)
        {
                in.method();
        }
}//传入  匿名内部类引用,并调用其方法。
上面的方法也可以写成如下形式
public static void show(){
new Inter()  { public void method()
                        {
                                System.out.println("method show run");
                        }
                }.method();}
      
  
                     
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马