黑马程序员技术交流社区

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

作者: 黄捷    时间: 2012-6-1 16:17
标题: 关于匿名内部类
   看了匿名内部类,确实还有点接受不了那个写法,同时有点小疑问,如:
   abstract class AbsDemo
{
       abstract void show();
}
class outer
{
      int a=3;
      public void function()
{
    new AbsDemo()
{
     void show()
{
   System.out.println("a="+a);
}
}.show.();
}
}


ps:这是部分代码,当然格式也没怎么调,直接是在发帖对话框写的,将就先看下
问题:这个show方法是调用的哪个show方法啊,是匿名类的么?那为什么在里面才重写了,就可以直接调用呢?还有就是匿名内部类以后用到的多不多啊?
作者: 丰亚彬    时间: 2012-6-1 16:21
你首先把匿名内部类拆分一下,其实就是new 父类或接口名().方法名(),只是你现在没法new这个对象,因为你必须实现里面的方法,所以你调用的show方法肯定就是你实现的那个方法喽
作者: 金鑫    时间: 2012-6-1 16:28
匿名内部类一般在swing事件监听的时候,用的比较多,多线程中用的比较多...
作者: 黄捷    时间: 2012-6-1 16:28
丰亚彬 发表于 2012-6-1 16:21
你首先把匿名内部类拆分一下,其实就是new 父类或接口名().方法名(),只是你现在没法new这个对象,因为你必 ...

明白,技术分给你了
作者: 丰亚彬    时间: 2012-6-1 16:36
黄捷 发表于 2012-6-1 16:28
明白,技术分给你了

哈哈,谢谢斑竹大人
作者: 袁錦泰    时间: 2012-6-1 17:30
本帖最后由 袁錦泰 于 2012-6-1 17:50 编辑
  1. clas ...  {
  2.     ...;
  3.     public static void main(String[] args)  {
  4.             Outer out = new Outer();
  5.             out.function();
  6. }
  7. class Outer  {
  8.         int a = 3;

  9.         public void function() {
  10.                 class Inner extends AbsDemo{
  11.                         void show(){
  12.                                 System.out.println("a="+a);
  13.                         }
  14.                 }
  15.                 Inner in = new Inner();
  16.                 in.show();
  17.                
  18.         }
  19. }
复制代码
这个和你的代码是一个效果,好好分析一下并不难理解.
只是把建立内部类继承抽象类,然后在内部类中复写抽象类方法,建立内部类对象调用show()方法这一步省略了,直接建立抽象类对象,复写抽象类中抽象方法并调用.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2