黑马程序员技术交流社区

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

作者: 0803宝    时间: 2015-8-17 21:50
标题: 有关匿名内部类的问题
是定义在局部位置的没有名字的内部类。
前提: 存在一个类,抽象类,或者接口。
本质理解:其实这是一个继承类或者实现接口的匿名的子类对象。
可是就是不会用,也看不懂匿名内部类。

作者: 蓬头小道士    时间: 2015-8-17 22:11
其实就是复写父类的子类就是没有名字,多看看视频,多写几次,就理解了。
作者: keviner    时间: 2015-8-17 23:46
本帖最后由 keviner 于 2015-8-17 23:47 编辑

new fu() {
     void method(){}
}.method();

父类引用建立匿名子类对象并调用method方法。
大概就这个意思吧
作者: sangyuan    时间: 2015-8-19 11:56
本帖最后由 sangyuan 于 2015-8-19 12:01 编辑

之前回复过类似的帖子,给你附上个代码,你一看应该就明白有什么好处了。
  1. /*
  2.         所有父类或者父接口出现的地方,完全可以用子类对象替代。
  3. */
  4. interface Animal
  5. {
  6.         public abstract void eat();

  7. }
  8. //方式一:普通的方法,创建一个Dog类来实现接口Animal的show方法,然后在下面测试类中,再创建一个对象来调用这个方法
  9. /*
  10. class Dog implements Animal
  11. {
  12.         public void eat()
  13.         {
  14.                 System.out.println("eat dog");
  15.         }
  16. }
  17. */
  18. class Test
  19. {
  20.         //一个方法的形式参数是接口(抽象类)
  21.         public void show(Animal a) //Animal a =  new Dog();
  22.         {
  23.                 a.eat();
  24.         }
  25. }

  26. class AnimalTest
  27. {
  28.         public static void main(String[] args)
  29.         {
  30.                 Test t = new Test();

  31.                 //Dog d = new Dog();
  32.                 //t.show(d);
  33.         
  34.                //方法二:使用匿名内部类,这样就不用再创建类,也不用再测试类中创建对象,需要注意的是,在这儿,匿名内部类是作为show方法里的参数进行传递的。
  35. t.show(new Animal(){
  36.                         public void eat()
  37.                         {
  38.                                 System.out.println("eat dog");
  39.                         }
  40.                 });
  41.         }
  42. }
复制代码








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