黑马程序员技术交流社区

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

作者: 大手牵小手    时间: 2015-3-3 21:13
标题: 匿名类问题
  1. abstract class Student
  2. {
  3.         abstract void speak();
  4. }
  5. class Teacher
  6. {
  7.         void look(Student stu)
  8.         {
  9.                 stu.speak();
  10.         }
  11. }
  12. public class example2 {

  13.         public static void main(String[] args) {
  14.                 // TODO Auto-generated method stub
  15.                 Teacher zhang = new Teacher();
  16.                 zhang.look(new Student()
  17.                                                 {
  18.                                         void speak()
  19.                                         {
  20.                                                System.out.println("this  is ...");
  21.                                         }
  22.                                                 }
  23.                           );
  24.         }

  25. }
复制代码

看不明白这是怎么回事,呜呜。。
作者: z47057554    时间: 2015-3-3 22:49
本帖最后由 z47057554 于 2015-3-3 22:50 编辑

相当于以下简写,省去了类的名字
  1. abstract class Student
  2. {
  3.         abstract void speak();
  4. }
  5. class Teacher
  6. {
  7.         void look(Student stu)
  8.         {
  9.                 stu.speak();
  10.         }
  11. }
  12. public class example2 {

  13.         public static void main(String[] args)
  14.         {
  15.                 // TODO Auto-generated method stub
  16.                 Teacher zhang = new Teacher();
  17.                
  18.                 //跟下面是一样的
  19.                 class StudentSon extends Student
  20.                 {
  21.                         void speak()
  22.                         {
  23.                               System.out.println("this  is ...");
  24.                         }
  25.                 }
  26.                
  27.                 //父类指针指向子类对象
  28.                 Student tempStu=new StudentSon();
  29.                
  30.                 zhang.look(tempStu);
  31.         }

  32. }
复制代码

作者: wdhm5423    时间: 2015-3-3 23:04
本帖最后由 wdhm5423 于 2015-3-3 23:08 编辑

匿名内部类:
new A(){}//因为是匿名,没有引用,只能使用一次,下次就找不到它了,方便书写。所以通常直接作为参数传进去(你的那个例子),或者直接运行其中的方法,如new Thread(){这里要复写run()方法}.start();    好理解这么写:new Thread().start;
正常new类:
A a=new A(){};有引用a,可以再使用。



作者: 大手牵小手    时间: 2015-3-4 15:43
wdhm5423 发表于 2015-3-3 23:04
匿名内部类:
new A(){}//因为是匿名,没有引用,只能使用一次,下次就找不到它了,方便书写。所以通常直接 ...

你好厉害!谢谢!




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