黑马程序员技术交流社区

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

作者: 王雷1    时间: 2013-11-27 11:51
标题: 匿名内部类
谁能给我写一个完整的在成员上而不是在局部的匿名内部类,还是匿名内部类就不能在成员的位置上只能在局部,我怎么写不出来,写出来eclipse就报错
作者: 王松松    时间: 2013-11-27 12:07
Inteface A{
              void method();
}

public class B{
            private  string  xxx;
            new A(){
                  publi void method(){
                           System.out.println("这是成员位置上的匿名内部类");
                  }
            }
}

希望对你有帮助!{:soso_e141:}

作者: 王雷1    时间: 2013-11-27 12:08
王松松 发表于 2013-11-27 12:07
Inteface A{
              void method();
}


先谢谢,
作者: 王雷1    时间: 2013-11-27 13:13
王松松 发表于 2013-11-27 12:07
Inteface A{
              void method();
}

我修复了一下,是这样的,
interface A{
              void method();
}
public class B{
       
        {
      new A(){
         public void method(){
             System.out.println("这是成员位置上的匿名内部类");
         }
      }.method();
        }
}
但是这样不是成构造代码块了么?要不就不行错误
作者: 陪你等日出    时间: 2013-11-27 13:16
王松松 发表于 2013-11-27 12:07
Inteface A{
              void method();
}

如果这样写了,new A()里面的method()方法咋么调用?
作者: 王松松    时间: 2013-11-27 13:30
陪你等日出 发表于 2013-11-27 13:16
如果这样写了,new A()里面的method()方法咋么调用?
  1. interface Jc
  2. {
  3.         void run();
  4. }

  5. class Outer
  6. {
  7.         Jc j = new Jc()
  8.         {
  9.                 public void run()
  10.                 {
  11.                         System.out.println("inner");
  12.                 }
  13.         };

  14. }

  15. class NBN
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Outer out = new Outer();
  20.                 Jc in = out.j;
  21.                 in.run();

  22.                
  23.         }
  24. }
复制代码

作者: 王松松    时间: 2013-11-27 13:32
王雷1 发表于 2013-11-27 13:13
我修复了一下,是这样的,
interface A{
              void method();

你加{    }干嘛?
作者: 王雷1    时间: 2013-11-27 13:33
王松松 发表于 2013-11-27 13:32
你加{    }干嘛?

不加报错

作者: 王松松    时间: 2013-11-27 13:36
王雷1 发表于 2013-11-27 13:33
不加报错

。。前面加个引用A a 试试。
作者: 陪你等日出    时间: 2013-11-27 13:38
王松松 发表于 2013-11-27 13:30

.....OK!
作者: 王雷1    时间: 2013-11-27 13:43
王松松 发表于 2013-11-27 13:36
。。前面加个引用A a 试试。

大哥,你敢不敢给我写个完整的,这个问题我都纠结2天了,解决不了,想不想做大善人了你?想就给我写一个
作者: 王松松    时间: 2013-11-27 13:50
王雷1 发表于 2013-11-27 13:43
大哥,你敢不敢给我写个完整的,这个问题我都纠结2天了,解决不了,想不想做大善人了你?想就给我写一个 ...

加了个借口类型的引用接受匿名内部类,差不多完整了吧?
  1. interface Jc

  2. {

  3.         void run();

  4. }



  5. class Outer

  6. {

  7.         Jc j = new Jc()

  8.         {

  9.                 public void run()

  10.                 {

  11.                         System.out.println("inner");

  12.                 }

  13.         };



  14. }
复制代码

作者: 王雷1    时间: 2013-11-27 13:53
王松松 发表于 2013-11-27 13:50
加了个借口类型的引用接受匿名内部类,差不多完整了吧?

你加了引用就不是匿名了,是吧
作者: 王松松    时间: 2013-11-27 14:04
王雷1 发表于 2013-11-27 13:53
你加了引用就不是匿名了,是吧

是匿名好吧。不然你自己编译看看生成的class文件,有一个Outer$1.class
作者: 王雷1    时间: 2013-11-27 14:05
本帖最后由 王雷1 于 2013-11-27 14:09 编辑
王松松 发表于 2013-11-27 14:04
是匿名好吧。不然你自己编译看看生成的class文件,有一个Outer$1.class


也就是说成员上的匿名内部类都要有引用? 那匿名还有什么意义?直接定义内部类不就完了么?比如线程的匿名内部类,如果在成员上我怎么开启strat方法?要引用。start();?
作者: 王松松    时间: 2013-11-27 14:25
王雷1 发表于 2013-11-27 14:05
也就是说成员上的匿名内部类都要有引用? 那匿名还有什么意义?直接定义内部类不就完了么?比如线程的匿 ...

匿名内部类一般需要有继承或者实现关系,适用于含有较少方法时。
至于他的应用和意义,我也说不上许多,可以作为某种参数传递等等。
如果不使用匿名内部类,那么就需要重新定义一个 .java文件体现继承或者实现关系。
作者: 王松松    时间: 2013-11-27 14:25
王雷1 发表于 2013-11-27 14:05
也就是说成员上的匿名内部类都要有引用? 那匿名还有什么意义?直接定义内部类不就完了么?比如线程的匿 ...

匿名内部类一般需要有继承或者实现关系,适用于含有较少方法时。
至于他的应用和意义,我也说不上许多,可以作为某种参数传递等等。
如果不使用匿名内部类,那么就需要重新定义一个 .java文件体现继承或者实现关系。
作者: 王雷1    时间: 2013-11-27 14:27
王松松 发表于 2013-11-27 14:25
匿名内部类一般需要有继承或者实现关系,适用于含有较少方法时。
至于他的应用和意义,我也说不上许多, ...

非常感谢,但是能不能请你帮我写一个开启线程的在成员位置上的匿名内部类
作者: 王松松    时间: 2013-11-27 14:51
王雷1 发表于 2013-11-27 14:27
非常感谢,但是能不能请你帮我写一个开启线程的在成员位置上的匿名内部类 ...
  1. public class  NbnThreadTest{
  2.         public static void main(String[] args){
  3.                
  4.                 new Thread(new Outer().r).start();
  5.         }
  6. }

  7. class Outer
  8. {
  9.         Runnable r = new Runnable()
  10.         {
  11.                 public void run(){
  12.                         System.out.println("run........");
  13.                 }
  14.         };
  15. }


复制代码

作者: 王雷1    时间: 2013-11-27 15:04
王松松 发表于 2013-11-27 14:51

如果我在一个类中,要实现主线程和开启的线程同时访问一个循环体,那就要引用名。strat,而有了引用的话不就没有起到匿名内部类的作用了么?因为没有直接开启。不管怎么说还是谢谢,可能是我太专牛角尖了,呵呵,我要下了,有机会在聊下
作者: 简★零度    时间: 2013-11-30 15:27
问题解决了记得改成提问结束!




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