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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大手牵小手 中级黑马   /  2015-3-3 21:13  /  988 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

看不明白这是怎么回事,呜呜。。

3 个回复

倒序浏览
本帖最后由 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:08 编辑

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


回复 使用道具 举报
wdhm5423 发表于 2015-3-3 23:04
匿名内部类:
new A(){}//因为是匿名,没有引用,只能使用一次,下次就找不到它了,方便书写。所以通常直接 ...

你好厉害!谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马